1
0
mirror of https://git.libssh.org/projects/libssh.git synced 2025-08-05 20:55:46 +03:00

fix bug #0000002 : in_socket_buffer and out_socket_buffer memleak +

"g" and "p" O(1) memleak.


git-svn-id: svn+ssh://svn.berlios.de/svnroot/repos/libssh/trunk@134 7dcaeef0-15fb-0310-b436-a5af3365683c
This commit is contained in:
Aris Adamantiadis
2008-03-03 14:51:35 +00:00
parent feccd44ef5
commit 01470097c6
5 changed files with 27 additions and 14 deletions

View File

@@ -441,7 +441,7 @@ void ssh_print_bignum(char *which,bignum num);
void dh_generate_x(SSH_SESSION *session); void dh_generate_x(SSH_SESSION *session);
void dh_generate_y(SSH_SESSION *session); void dh_generate_y(SSH_SESSION *session);
void dh_generate_f(SSH_SESSION *session); void dh_generate_f(SSH_SESSION *session);
void ssh_crypto_finalize();
STRING *dh_get_e(SSH_SESSION *session); STRING *dh_get_e(SSH_SESSION *session);
STRING *dh_get_f(SSH_SESSION *session); STRING *dh_get_f(SSH_SESSION *session);
void dh_import_f(SSH_SESSION *session,STRING *f_string); void dh_import_f(SSH_SESSION *session,STRING *f_string);

View File

@@ -65,6 +65,7 @@ static unsigned char p_value[] = {
static unsigned long g_int = 2 ; /* G is defined as 2 by the ssh2 standards */ static unsigned long g_int = 2 ; /* G is defined as 2 by the ssh2 standards */
static bignum g; static bignum g;
static bignum p; static bignum p;
static int ssh_crypto_inited=0;
/* maybe it might be enhanced .... */ /* maybe it might be enhanced .... */
/* XXX Do it. */ /* XXX Do it. */
@@ -84,10 +85,10 @@ int ssh_get_random(void *where, int len, int strong){
} }
} }
/* it inits the values g and p which are used for DH key agreement */ /* it inits the values g and p which are used for DH key agreement */
void ssh_crypto_init(){ void ssh_crypto_init(){
static int init=0; if(ssh_crypto_inited == 0){
if(!init){
#ifdef HAVE_LIBGCRYPT #ifdef HAVE_LIBGCRYPT
gcry_check_version(NULL); gcry_check_version(NULL);
if (!gcry_control(GCRYCTL_INITIALIZATION_FINISHED_P,0)) if (!gcry_control(GCRYCTL_INITIALIZATION_FINISHED_P,0))
@@ -105,7 +106,15 @@ void ssh_crypto_init(){
bignum_bin2bn(p_value,P_LEN,p); bignum_bin2bn(p_value,P_LEN,p);
OpenSSL_add_all_algorithms(); OpenSSL_add_all_algorithms();
#endif #endif
init++; ssh_crypto_inited++;
}
}
void ssh_crypto_finalize(){
if(ssh_crypto_inited){
bignum_free(g);
bignum_free(p);
ssh_crypto_inited=0;
} }
} }

View File

@@ -25,6 +25,7 @@ MA 02111-1307, USA. */
int ssh_finalize() int ssh_finalize()
{ {
ssh_crypto_finalize();
#ifdef HAVE_LIBGCRYPT #ifdef HAVE_LIBGCRYPT
gcry_control(GCRYCTL_TERM_SECMEM); gcry_control(GCRYCTL_TERM_SECMEM);
#elif defined HAVE_LIBCRYPTO #elif defined HAVE_LIBCRYPTO

View File

@@ -58,6 +58,10 @@ void ssh_cleanup(SSH_SESSION *session){
buffer_free(session->in_buffer); buffer_free(session->in_buffer);
if(session->out_buffer) if(session->out_buffer)
buffer_free(session->out_buffer); buffer_free(session->out_buffer);
if(session->in_socket_buffer)
buffer_free(session->in_socket_buffer);
if(session->out_socket_buffer)
buffer_free(session->out_socket_buffer);
if(session->banner) if(session->banner)
free(session->banner); free(session->banner);
if(session->options) if(session->options)

View File

@@ -470,7 +470,6 @@ int main(int argc, char **argv){
memset(password,0,strlen(password)); memset(password,0,strlen(password));
} }
ssh_say(1,"Authentication success\n"); ssh_say(1,"Authentication success\n");
printf("%s\n",argv[0]);
if(strstr(argv[0],"sftp")){ if(strstr(argv[0],"sftp")){
sftp=1; sftp=1;
ssh_say(1,"doing sftp instead\n"); ssh_say(1,"doing sftp instead\n");