I have an application which creates and destroys many SSL objects using 
SSL_new and SSL_free.  The SSL objects are bound to memory BIOs rather 
than sockets.  Here is a brief annotation of the relevent sections of code 
(with error checks removed):

  ks->ssl = SSL_new (ssl_ctx);

  ks->ssl_bio = BIO_new (BIO_f_ssl());
  ks->ciphertext_in = BIO_new (BIO_s_mem ());
  ks->ciphertext_out = BIO_new (BIO_s_mem ());

  if (server)
    SSL_set_accept_state (ks->ssl);
  else
    SSL_set_connect_state (ks->ssl);

  SSL_set_bio (ks->ssl, ks->ciphertext_in, ks->ciphertext_out);
  BIO_set_ssl (ks->ssl_bio, ks->ssl, BIO_NOCLOSE);
  
  /* DO SOMETHING */
  
  SSL_free (ks->ssl);

The problem is that each of these iterations causes OpenSSL to leak 10K or 
more.  At first I thought that maybe the BIOs returned by BIO_new need to 
be explicitly freed, but then I saw that OpenSSL is freeing them on the 
SSL_free call.

98212 file=buffer.c, line=67, number=12, address=0815D738
71750 file=bio_ssl.c, line=108, number=24, address=081B3AB8
32120 file=buffer.c, line=110, number=1868, address=08199A50
72332 file=bio_lib.c, line=73, number=64, address=08170740
701884 bytes leaked in 1960 chunks

After many iterations, the amount of memory leaked is substantial.  All of 
the leaks are occurring at one of these 4 locations (above) in the code 
(openssl-0.9.6c) which I obtained by building OpenSSL with CRYPTO_MDEBUG 
defined.

Any ideas?

Thanks,

James Yonan
Boulder, Colorado, USA


______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
Development Mailing List                       [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to