Some additional cleanup functions

This commit is contained in:
Matt Johnston 2015-02-24 22:17:04 +08:00
parent 21bed0d21a
commit 8008b595d3
2 changed files with 14 additions and 4 deletions

View File

@ -260,13 +260,16 @@ void session_cleanup() {
return; return;
} }
/* Beware of changing order of functions here. */
/* Must be before extra_session_cleanup() */
chancleanup();
if (ses.extra_session_cleanup) { if (ses.extra_session_cleanup) {
ses.extra_session_cleanup(); ses.extra_session_cleanup();
} }
chancleanup(); /* After these are freed most functions will exit */
/* Most dropbear functions are unsafe to run after this point */
#ifdef DROPBEAR_CLEANUP #ifdef DROPBEAR_CLEANUP
/* listeners call cleanup functions, this should occur before /* listeners call cleanup functions, this should occur before
other session state is freed. */ other session state is freed. */
@ -289,6 +292,12 @@ void session_cleanup() {
cleanup_buf(&ses.payload); cleanup_buf(&ses.payload);
cleanup_buf(&ses.readbuf); cleanup_buf(&ses.readbuf);
cleanup_buf(&ses.writepayload); cleanup_buf(&ses.writepayload);
cleanup_buf(&ses.kexhashbuf);
cleanup_buf(&ses.transkexinit);
if (ses.dh_K) {
mp_clear(ses.dh_K);
}
m_free(ses.dh_K);
m_burn(ses.keys, sizeof(struct key_context)); m_burn(ses.keys, sizeof(struct key_context));
m_free(ses.keys); m_free(ses.keys);

View File

@ -83,8 +83,9 @@ svr_session_cleanup(void) {
svr_pubkey_options_cleanup(); svr_pubkey_options_cleanup();
m_free(svr_ses.addrstring); m_free(svr_ses.addrstring);
m_free(svr_ses.childpids);
m_free(svr_ses.remotehost); m_free(svr_ses.remotehost);
m_free(svr_ses.childpids);
svr_ses.childpidsize = 0;
} }
static void static void