summaryrefslogtreecommitdiffstats
path: root/crypto/mem_dbg.c
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2016-04-14 21:28:54 +0100
committerMatt Caswell <matt@openssl.org>2016-04-14 22:15:32 +0100
commit1ee7b8b97c90e8e59627bfcbda3714f18368a9e1 (patch)
tree53a54a29d27fbdde8625fbfce8d230255a5fc020 /crypto/mem_dbg.c
parent6e08e9e7ccf00aba847351adc3b46b9dae1f114d (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.c8
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();