diff options
author | Matt Caswell <matt@openssl.org> | 2016-04-14 21:28:54 +0100 |
---|---|---|
committer | Matt Caswell <matt@openssl.org> | 2016-04-14 22:15:32 +0100 |
commit | 1ee7b8b97c90e8e59627bfcbda3714f18368a9e1 (patch) | |
tree | 53a54a29d27fbdde8625fbfce8d230255a5fc020 /crypto/mem_dbg.c | |
parent | 6e08e9e7ccf00aba847351adc3b46b9dae1f114d (diff) |
Fix ex_data locks issue
Travis identified a problem with freeing the ex_data locks which wasn't
quite right in ff2344052. Trying to fix it identified a further problem:
the ex_data locks are cleaned up by OPENSSL_cleanup(), which is called
explicitly by CRYPTO_mem_leaks(), but then later the BIO passed to
CRYPTO_mem_leaks() is freed. An attempt is then made to use the ex_data
lock already freed.
Reviewed-by: Tim Hudson <tjh@openssl.org>
Diffstat (limited to 'crypto/mem_dbg.c')
-rw-r--r-- | crypto/mem_dbg.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/crypto/mem_dbg.c b/crypto/mem_dbg.c index d4d72f25c6..2b8cf73028 100644 --- a/crypto/mem_dbg.c +++ b/crypto/mem_dbg.c @@ -115,7 +115,7 @@ #include "internal/threads.h" #include <openssl/crypto.h> #include <openssl/buffer.h> -#include <openssl/bio.h> +#include "internal/bio.h" #include <openssl/lhash.h> #ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE @@ -636,6 +636,12 @@ int CRYPTO_mem_leaks(BIO *b) { MEM_LEAK ml; + /* + * OPENSSL_cleanup() will free the ex_data locks so we can't have any + * ex_data hanging around + */ + bio_free_ex_data(b); + /* Ensure all resources are released */ OPENSSL_cleanup(); |