On Mon, Feb 05, 2007, Lars Uhlmann wrote:

> >Please reference http://www.openssl.org/support/faq.html#PROG13 -- 
> > "I think I've detected a memory leak, is this a bug?"
> >
> >Thanks!
> 
> It doesn't matter if I call those cleaning functions, the leaks are
> still there.
> 
> /* --- cut here --- */
> #include <openssl/ssl.h>
> #include <openssl/bio.h>
> #include <openssl/err.h>
> #include <openssl/engine.h>
> #include <openssl/conf.h>
> 
> int main(int argc, char *argv[])
> {
>         SSL_library_init();
> 
>         //ERR_remove_state(0);
>         //ERR_free_strings();
>         ENGINE_cleanup();
>         CONF_modules_unload(1);
> 
>         return 1;
> }
> /* --- cut here --- */
> 
> valgrind: still reachable: 1,336 bytes in 81 blocks.
> What now?
> 

You haven't included EVP_cleanup() and CRYPTO_cleanup_all_ex_data() mentioned
in that FAQ. 

> My problem is, I dont't know _where to read_ about doing it right. The 
> large output about blocks allocated from openssl makes it hard to find 
> my own leaks. That's quite confusing.
> 
> These functions I'm now using. Can someone please look at it and tell me 
> a little bit more where I should pay attention about freeing things?
> 
> ,-----
> | SSL_library_init();
> |
> | SSL_CTX* pCtx = SSL_CTX_new(SSLv3_client_method())
> |
> | SSL_CTX_use_certificate_chain_file(pCtx, "client.crt")
> | SSL_CTX_use_PrivateKey_file(pCtx, "client.key", SSL_FILETYPE_PEM)
> | SSL_CTX_check_private_key(pCtx)
> | SSL_CTX_load_verify_locations(pCtx, "ca.crt", NULL))
> |
> | BIO* pBio = BIO_new_buffer_ssl_connect(pCtx)
> |
> | BIO_get_ssl(pBio, &pSsl);
> | SSL_set_mode(pSsl, SSL_MODE_AUTO_RETRY);
> |
> | BIO_set_conn_hostname(pBio, HOSTNAME);
> | BIO_set_conn_port(pBio, HTTPS_PORT);
> | BIO_do_connect(pBio)
> |
> | SSL_CTX_set_verify(pCtx, VERIFY_SWITCHES, NULL);
> | SSL_CTX_set_verify_depth(pCtx, 1);
> |
> | SSL_get_verify_result(pSsl)
> |
> | BIO_write(pBio, REQUEST, sizeof(REQUEST));
> | BIO_flush(pBio)
> | BIO_gets(pBio, buffer, buffer_size);
> |
> | SSL_CTX_free(pCtx);
> | BIO_free_all(pBio);
> `-----
> 

Freeing up should be after you've completed all OpenSSL functions in this
example after BIO_free_all(pBio);

Steve.
--
Dr Stephen N. Henson. Email, S/MIME and PGP keys: see homepage
OpenSSL project core developer and freelance consultant.
Funding needed! Details on homepage.
Homepage: http://www.drh-consultancy.demon.co.uk
______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    openssl-users@openssl.org
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to