Hi, I'm a bit confused about how to free a BIO pair associated to a SSL. The doc at https://www.openssl.org/docs/crypto/BIO_s_bio.html clearly says:
---------------------------- Both halves of a BIO pair should be freed. That is even if one half is implicit freed due to a BIO_free_all() or SSL_free() call the other half needs to be freed. EXAMPLE BIO *internal_bio, *network_bio; BIO_new_bio_pair(internal_bio, 0, network_bio, 0); SSL_set_bio(ssl, internal_bio, internal_bio); ... SSL_free(ssl); /* implicitly frees internal_bio */ BIO_free(network_bio); ---------------------------- Is it true that I must call to BIO_free(network_bio)? The SSL_free() code "seems" to do it by itself!: -------------------------- void SSL_free(SSL *s) { ... if (s->rbio != NULL) BIO_free_all(s->rbio); if ((s->wbio != NULL) && (s->wbio != s->rbio)) BIO_free_all(s->wbio); -------------------------- In my code I get an obvious crash if I call BIO_free(internal_bio) after SSL_free(ssl), but I do NOT get a crash if I call BIO_free(network_bio). Anyhow in my code I do not use BIO_new_bio_pair() but instead: ------------------------ BIO* internal_bio = BIO_new(BIO_s_mem()); BIO* network_bio = BIO_new(BIO_s_mem()); SSL_set_bio(ssl, internal_bio, network_bio); void destroy() { if (ssl) { SSL_free(ssl); } // This does NOT crash but, should I do it or not? leak otherwise? if (write_bio) { BIO_free(write_bio); } } ------------------------ Thanks a lot. -- Iñaki Baz Castillo <i...@aliax.net> ______________________________________________________________________ OpenSSL Project http://www.openssl.org User Support Mailing List openssl-users@openssl.org Automated List Manager majord...@openssl.org