Enable/disable crypto-mdebug just like other features
authorViktor Dukhovni <openssl-users@dukhovni.org>
Sun, 10 Jan 2016 19:42:10 +0000 (14:42 -0500)
committerDr. Stephen Henson <steve@openssl.org>
Mon, 11 Jan 2016 02:41:16 +0000 (02:41 +0000)
Also always abort() on leak failure.

Reviewed-by: Stephen Henson <steve@openssl.org>
32 files changed:
Configurations/10-main.conf
Configurations/90-team.conf
Configurations/99-personal-ben.conf
Configurations/99-personal-levitte.conf
Configure
Makefile.org
apps/openssl.c
crypto/asn1/tasn_new.c
crypto/mem.c
crypto/mem_dbg.c
doc/crypto/OPENSSL_malloc.pod
include/openssl/crypto.h
test/clienthellotest.c
test/danetest.c
test/dsatest.c
test/ecdhtest.c
test/ecdsatest.c
test/ectest.c
test/enginetest.c
test/evp_extra_test.c
test/evp_test.c
test/exptest.c
test/memleaktest.c
test/p5_crpt2_test.c
test/recipes/90-test_memleak.t
test/rsa_test.c
test/srptest.c
test/ssltest.c
test/verify_extra_test.c
util/mkdef.pl
util/pl/linux.pl
util/pl/ultrix.pl

index 4bd4366514fd2c15640f29d67536793896b3a433..52b3924c3020432967146a6863885932152fec32 100644 (file)
@@ -26,7 +26,7 @@
     "vos-gcc" => {
         cc               => "gcc",
         cflags           => "-Wall -DOPENSSL_SYS_VOS -D_POSIX_C_SOURCE=200112L -D_BSD -D_VOS_EXTENDED_NAMES -DB_ENDIAN",
-        debug_cflags     => "-O0 -g -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG",
+        debug_cflags     => "-O0 -g -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG",
         release_cflags   => "-O3",
         thread_cflag     => "(unknown)",
         sys_id           => "VOS",
         # -mcpu=ultrasparc
         inherit_from     => [ "solaris-sparcv7-gcc", asm("sparcv9_asm") ],
         cflags           => sub { join(" ","-m32 -mcpu=ultrasparc",@_); },
-        debug_cflags     => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -O -g -pedantic -ansi -Wshadow -Wno-long-long -D__EXTENSIONS__",
+        debug_cflags     => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DPEDANTIC -O -g -pedantic -ansi -Wshadow -Wno-long-long -D__EXTENSIONS__",
     },
     "solaris64-sparcv9-gcc" => {
         inherit_from     => [ "solaris-sparcv9-gcc" ],
         inherit_from     => [ "solaris-common" ],
         cc               => "cc",
         cflags           => sub { join(" ","-xstrconst -Xa -DB_ENDIAN -DBN_DIV2W",@_) },
-        debug_cflags     => "-g -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG",
+        debug_cflags     => "-g -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG",
         release_cflags   => "-xO5 -xdepend",
         thread_cflag     => "-D_REENTRANT",
         lflags           => sub { join(" ",@_,"-mt -lpthread") },
     "linux-generic32" => {
         cc               => "gcc",
         cflags           => "-Wall",
-        debug_cflags     => "-O0 -g -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG",
+        debug_cflags     => "-O0 -g -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG",
         release_cflags   => "-O3",
         thread_cflag     => "-pthread",
         lflags           => "-ldl",
         inherit_from     => [ "linux-generic32", asm("x86_elf_asm") ],
         cc               => "gcc",
         cflags           => "-march=i486 -DL_ENDIAN -Wall",
-        debug_cflags     => "-O0 -g -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG",
+        debug_cflags     => "-O0 -g -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG",
         release_cflags   => "-O3 -fomit-frame-pointer",
         debug_lflags     => "-lefence",
         bn_ops           => "BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}",
     },
     "vxworks-ppc750-debug" => {
         cc               => "ccppc",
-        cflags           => "-ansi -nostdinc -DPPC750 -D_REENTRANT -fvolatile -fno-builtin -fno-for-scope -fsigned-char -Wall -msoft-float -mlongcall -DCPU=PPC604 -I\$(WIND_BASE)/target/h -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DDEBUG -g",
+        cflags           => "-ansi -nostdinc -DPPC750 -D_REENTRANT -fvolatile -fno-builtin -fno-for-scope -fsigned-char -Wall -msoft-float -mlongcall -DCPU=PPC604 -I\$(WIND_BASE)/target/h -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DDEBUG -g",
         sys_id           => "VXWORKS",
         lflags           => "-r",
     },
index 57c28cf2cf9b89af3c3e4a8742c45f01c6e99351..c41022a6628fa5473f7ec9c5e1982225bbcb75d7 100644 (file)
     },
     "debug" => {
         cc               => "gcc",
-        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror",
+        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DOPENSSL_NO_ASM -ggdb -g2 -Wformat -Wshadow -Wmissing-prototypes -Wmissing-declarations -Werror",
         thread_cflag     => "(unknown)",
         lflags           => "-lefence",
     },
     "debug-erbridge" => {
         inherit_from     => [ "x86_64_asm" ],
         cc               => "gcc",
-        cflags           => "$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -DCRYPTO_MDEBUG -m64 -DL_ENDIAN -DTERMIO -g",
+        cflags           => "$gcc_devteam_warn -DBN_DEBUG -DCONF_DEBUG -m64 -DL_ENDIAN -DTERMIO -g",
         thread_cflag     => "-D_REENTRANT",
         lflags           => "-ldl",
         bn_ops           => "SIXTY_FOUR_BIT_LONG RC4_CHUNK DES_INT DES_UNROLL",
@@ -36,7 +36,7 @@
     "debug-linux-pentium" => {
         inherit_from     => [ "x86_elf_asm" ],
         cc               => "gcc",
-        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -mcpu=pentium -Wall",
+        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DL_ENDIAN -g -mcpu=pentium -Wall",
         thread_cflag     => "-D_REENTRANT",
         lflags           => "-ldl",
         bn_ops           => "BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}",
@@ -45,7 +45,7 @@
     "debug-linux-ppro" => {
         inherit_from     => [ "x86_elf_asm" ],
         cc               => "gcc",
-        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -mcpu=pentiumpro -Wall",
+        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DL_ENDIAN -g -mcpu=pentiumpro -Wall",
         thread_cflag     => "-D_REENTRANT",
         lflags           => "-ldl",
         bn_ops           => "BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}",
@@ -54,7 +54,7 @@
     "debug-linux-elf-noefence" => {
         inherit_from     => [ "x86_elf_asm" ],
         cc               => "gcc",
-        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DL_ENDIAN -g -march=i486 -Wall",
+        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DL_ENDIAN -g -march=i486 -Wall",
         thread_cflag     => "-D_REENTRANT",
         lflags           => "-ldl",
         bn_ops           => "BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}",
index ed7fa216d6e9fa9273f6feb06039106d3ae7ae2c..28beee9b4b0958bffdbcb4be5dc9b4a35038427a 100644 (file)
@@ -8,17 +8,17 @@
 %targets = (
     "debug-ben" => {
         cc               => "gcc",
-        cflags           => "$gcc_devteam_warn -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DDEBUG_SAFESTACK -O2 -pipe",
+        cflags           => "$gcc_devteam_warn -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DDEBUG_SAFESTACK -O2 -pipe",
         thread_cflag     => "(unknown)",
     },
     "debug-ben-openbsd" => {
         cc               => "gcc",
-        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -O2 -pedantic -Wall -Wshadow -Werror -pipe",
+        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -O2 -pedantic -Wall -Wshadow -Werror -pipe",
         thread_cflag     => "(unknown)",
     },
     "debug-ben-openbsd-debug" => {
         cc               => "gcc",
-        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe",
+        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DPEDANTIC -DDEBUG_SAFESTACK -DOPENSSL_OPENBSD_DEV_CRYPTO -DOPENSSL_NO_ASM -g3 -O2 -pedantic -Wall -Wshadow -Werror -pipe",
         thread_cflag     => "(unknown)",
     },
     "debug-ben-debug" => {
     },
     "debug-ben-no-opt" => {
         cc               => "gcc",
-        cflags           => " -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -DDEBUG_SAFESTACK -DCRYPTO_MDEBUG -Werror -DL_ENDIAN -Wall -g3",
+        cflags           => " -Wall -Wmissing-prototypes -Wstrict-prototypes -Wmissing-declarations -DDEBUG_SAFESTACK -Werror -DL_ENDIAN -Wall -g3",
         thread_cflag     => "(unknown)",
     },
     "debug-ben-strict" => {
         cc               => "gcc",
-        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCRYPTO_MDEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe",
+        cflags           => "-DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_CTX_DEBUG -DCONST_STRICT -O2 -Wall -Wshadow -Werror -Wpointer-arith -Wcast-qual -Wwrite-strings -pipe",
         thread_cflag     => "(unknown)",
     },
     "debug-ben-darwin64" => {
index 6df2ea623ff43d514c3e4e2ad03daa02ae1c9ecf..aa661a2c5385984c878c052945a010785b135457 100644 (file)
@@ -10,7 +10,7 @@
         inherit_from     => [ "x86_elf_asm" ],
         cc               => "gcc",
         cflags           => "-DL_ENDIAN -Wall",
-        debug_cflags     => "-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG-ggdb -g3",
+        debug_cflags     => "-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -ggdb -g3",
         thread_cflag     => "-D_REENTRANT",
         lflags           => "-ldl",
         bn_ops           => "BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT",
@@ -22,7 +22,7 @@
     "debug-levitte-linux-noasm" => {
         inherit_from     => [ "no_asm_filler" ],
         cc               => "gcc",
-        cflags           => "-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DCRYPTO_MDEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -ggdb -g3 -Wall",
+        cflags           => "-DLEVITTE_DEBUG -DBN_DEBUG -DREF_CHECK -DCONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -ggdb -g3 -Wall",
         thread_cflag     => "-D_REENTRANT",
         lflags           => "-ldl",
         bn_ops           => "BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT",
@@ -34,7 +34,7 @@
     "debug-levitte-linux-elf-extreme" => {
         inherit_from     => [ "x86_elf_asm" ],
         cc               => "gcc",
-        cflags           => "-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DL_ENDIAN -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe",
+        cflags           => "-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DENGINE_CONF_DEBUG -DL_ENDIAN -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe",
         thread_cflag     => "-D_REENTRANT",
         lflags           => "-ldl",
         bn_ops           => "BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT",
@@ -47,7 +47,7 @@
     "debug-levitte-linux-noasm-extreme" => {
         inherit_from     => [ "no_asm_filler" ],
         cc               => "gcc",
-        cflags           => "-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DCRYPTO_MDEBUG -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe",
+        cflags           => "-DLEVITTE_DEBUG -DREF_CHECK -DCONF_DEBUG -DBN_DEBUG -DBN_DEBUG_RAND -DENGINE_CONF_DEBUG -DOPENSSL_NO_ASM -DL_ENDIAN -DPEDANTIC -ggdb -g3 -pedantic -ansi -Wall -W -Wundef -Wshadow -Wcast-align -Wstrict-prototypes -Wmissing-prototypes -Wno-long-long -Wundef -Wconversion -pipe",
         thread_cflag     => "-D_REENTRANT",
         lflags           => "-ldl",
         bn_ops           => "BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT",
index 3a5bd8e9de9edb7eee77a51aab23f95d97e52474..1b0cddb3631fa19bb13f331fdbabaac8f5ced240 100755 (executable)
--- a/Configure
+++ b/Configure
@@ -100,7 +100,7 @@ my $usage="Usage: Configure [no-<cipher> ...] [enable-<cipher> ...] [experimenta
 # Minimum warning options... any contributions to OpenSSL should at least get
 # past these.
 
-my $gcc_devteam_warn = "-Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Wtype-limits -Werror -DCRYPTO_MDEBUG -DCRYPTO_MDEBUG_ABORT -DREF_CHECK -DDEBUG_UNUSED";
+my $gcc_devteam_warn = "-Wall -pedantic -DPEDANTIC -Wno-long-long -Wsign-compare -Wmissing-prototypes -Wshadow -Wformat -Wtype-limits -Werror -DREF_CHECK -DDEBUG_UNUSED";
 
 # These are used in addition to $gcc_devteam_warn when the compiler is clang.
 # TODO(openssl-team): fix problems and investigate if (at least) the
@@ -908,13 +908,14 @@ my %disabled = ( # "what"         => "comment" [or special keyword "experimental
                 "jpake"          => "experimental",
                 "md2"            => "default",
                 "rc5"            => "default",
-                "sctp"       => "default",
+                "sctp"           => "default",
                 "shared"         => "default",
                 "ssl-trace"      => "default",
                 "store"          => "experimental",
                 "unit-test"      => "default",
                 "zlib"           => "default",
-                "zlib-dynamic"   => "default"
+                "zlib-dynamic"   => "default",
+                "crypto-mdebug"  => "default",
               );
 my @experimental = ();
 
index ab6a74eb197e1529bc5b2568ca0a893a4d346f65..b45862e09ae21b1d88133e907f9056202cb2cd8a 100644 (file)
@@ -46,7 +46,6 @@ OPENSSLDIR=/usr/local/ssl
 # LOCK_DEBUG - turns on lots of lock debug output :-)
 # REF_CHECK - turn on some xyz_free() assertions.
 # REF_PRINT - prints some stuff on structure free.
-# CRYPTO_MDEBUG - turns on my 'memory leak' detecting stuff
 # MFUNC - Make all Malloc/Free/Realloc calls call
 #       CRYPTO_malloc/CRYPTO_free/CRYPTO_realloc which can be setup to
 #       call application defined callbacks via CRYPTO_set_mem_functions()
index d21988e77fd1ff1cdcb084adc3c1ca5f5583574b..411fe6980d7feb898112807087a49ff92e7a60de 100644 (file)
@@ -429,7 +429,7 @@ int main(int argc, char *argv[])
     BIO_free(bio_in);
     BIO_free_all(bio_out);
     apps_shutdown();
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks(bio_err);
 #endif
     BIO_free(bio_err);
index 9362ca2662e254ff5f8fffdf67b725f238f6a8ce..125b26fd7f554ad722b0285c4e74f4690c63e7d9 100644 (file)
@@ -102,7 +102,7 @@ int asn1_item_embed_new(ASN1_VALUE **pval, const ASN1_ITEM *it, int embed)
     else
         asn1_cb = 0;
 
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     OPENSSL_mem_debug_push(it->sname ? it->sname : "asn1_item_embed_new");
 #endif
 
@@ -135,7 +135,7 @@ int asn1_item_embed_new(ASN1_VALUE **pval, const ASN1_ITEM *it, int embed)
             if (!i)
                 goto auxerr;
             if (i == 2) {
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
                 OPENSSL_mem_debug_pop();
 #endif
                 return 1;
@@ -160,7 +160,7 @@ int asn1_item_embed_new(ASN1_VALUE **pval, const ASN1_ITEM *it, int embed)
             if (!i)
                 goto auxerr;
             if (i == 2) {
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
                 OPENSSL_mem_debug_pop();
 #endif
                 return 1;
@@ -184,14 +184,14 @@ int asn1_item_embed_new(ASN1_VALUE **pval, const ASN1_ITEM *it, int embed)
             goto auxerr;
         break;
     }
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     OPENSSL_mem_debug_pop();
 #endif
     return 1;
 
  memerr:
     ASN1err(ASN1_F_ASN1_ITEM_EMBED_NEW, ERR_R_MALLOC_FAILURE);
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     OPENSSL_mem_debug_pop();
 #endif
     return 0;
@@ -199,7 +199,7 @@ int asn1_item_embed_new(ASN1_VALUE **pval, const ASN1_ITEM *it, int embed)
  auxerr:
     ASN1err(ASN1_F_ASN1_ITEM_EMBED_NEW, ASN1_R_AUX_ERROR);
     ASN1_item_ex_free(pval, it);
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     OPENSSL_mem_debug_pop();
 #endif
     return 0;
@@ -259,7 +259,7 @@ static int asn1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt)
         *pval = NULL;
         return 1;
     }
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     OPENSSL_mem_debug_push(tt->field_name
             ? tt->field_name : "asn1_template_new");
 #endif
@@ -279,7 +279,7 @@ static int asn1_template_new(ASN1_VALUE **pval, const ASN1_TEMPLATE *tt)
     /* Otherwise pass it back to the item routine */
     ret = asn1_item_embed_new(pval, it, embed);
  done:
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     OPENSSL_mem_debug_pop();
 #endif
     return ret;
index ec9efea7160ee3a564b373343b45893fa8cac5af..096b1919b75f621d1fe3606c26b8a982accec0fc 100644 (file)
@@ -74,7 +74,7 @@ static void *(*realloc_wrapper)(void *, size_t, const char *, int)
 static void (*free_wrapper)(void *)
     = CRYPTO_free;
 
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
 static int call_malloc_debug = 1;
 #else
 static int call_malloc_debug = 0;
@@ -125,7 +125,7 @@ void *CRYPTO_malloc(size_t num, const char *file, int line)
         return NULL;
 
     allow_customize = 0;
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     if (call_malloc_debug) {
         CRYPTO_mem_debug_malloc(NULL, num, 0, file, line);
         ret = malloc(num);
@@ -174,7 +174,7 @@ void *CRYPTO_realloc(void *str, size_t num, const char *file, int line)
     }
 
     allow_customize = 0;
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     if (call_malloc_debug) {
         void *ret;
         CRYPTO_mem_debug_realloc(str, NULL, num, 0, file, line);
@@ -211,7 +211,7 @@ void *CRYPTO_clear_realloc(void *str, size_t old_len, size_t num,
 
     /* Allocate new memory.  Call malloc and do a copy, so that we can
      * cleanse the old buffer. */
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     if (call_malloc_debug) {
         CRYPTO_mem_debug_realloc(str, NULL, num, 0, file, line);
         ret = malloc(num);
@@ -233,7 +233,7 @@ void *CRYPTO_clear_realloc(void *str, size_t old_len, size_t num,
 
 void CRYPTO_free(void *str)
 {
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     if (call_malloc_debug) {
         CRYPTO_mem_debug_free(str, 0);
         free(str);
index 72487b5e03501cf05afccae96ee8d85f27e9d4b5..1e9dd83c147c8ba0502def085c2d878f35943441 100644 (file)
  * checking temporarily. State CRYPTO_MEM_CHECK_ENABLE without ..._ON makes
  * no sense whatsoever.
  */
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
 static int mh_mode = CRYPTO_MEM_CHECK_OFF;
+#endif
 
 #ifndef OPENSSL_NO_CRYPTO_MDEBUG
 static unsigned long order = 0; /* number of memory requests */
@@ -203,7 +205,7 @@ static void app_info_free(APP_INFO *inf)
 
 int CRYPTO_mem_ctrl(int mode)
 {
-#ifndef CRYPTO_MDEBUG
+#ifdef OPENSSL_NO_CRYPTO_MDEBUG
     return mode - mode;
 #else
     int ret = mh_mode;
@@ -663,9 +665,7 @@ void CRYPTO_mem_leaks(BIO *b)
     }
     if (ml.chunks != 0) {
         BIO_printf(b, "%ld bytes leaked in %d chunks\n", ml.bytes, ml.chunks);
-# ifdef CRYPTO_MDEBUG_ABORT
         abort();
-# endif
     } else {
         /*
          * Make sure that, if we found no leaks, memory-leak debugging itself
index bf7c3ab9edef016c65ba1f0a5bf86f8bea8c186b..eef8c6439384ccf7a06eb06618f77924e8a29e16 100644 (file)
@@ -56,7 +56,7 @@ CRYPTO_mem_leaks, CRYPTO_mem_leaks_fp - Memory allocation functions
  #define CRYPTO_MEM_CHECK_DISABLE
  #define CRYPTO_MEM_CHECK_ENABLE
 
- int CRYPTO_mem_ctrl(int flags);
+ int CRYPTO_mem_ctrl(int mode);
 
  int OPENSSL_mem_debug_push(const char *info)
  int OPENSLS_mem_debug_pop)(void)
@@ -112,12 +112,14 @@ This is most useful for identifying memory leaks.
 CRYPTO_set_mem_debug() turns this tracking on and off.  It is normally
 called at startup, but can be called at any time.
 
-Finer-grain control of the tracking can be done with CRYPTO_mem_ctrl().
-The most common case is to enable tracking, which is done by using
-the B<CRYPTO_MEM_CHECK_ON> constant; it can be turned off by using
-the B<CRYPTO_MEM_CHECK_OFF> value.  The disable and enable values are
-most commonly used within OpenSSL to termporarily suspend and restore
-tracking of library internals.
+CRYPTO_mem_ctrl() provides fine-grained control of memory leak tracking.
+To enable tracking call CRYPTO_mem_ctrl() with a B<mode> argument of
+the B<CRYPTO_MEM_CHECK_ON>.
+To disable tracking call CRYPTO_mem_ctrl() with a B<mode> argument of
+the B<CRYPTO_MEM_CHECK_OFF>.
+The B<CRYPTO_MEM_CHECK_DISABLE> and B<CRYPTO_MEM_CHECK_ENABLE> modes
+are used internally within OpenSSL to temporarily suspend and resume
+tracking.
 
 While checking memory, it can be useful to store additional context
 about what is being done.
@@ -129,11 +131,9 @@ This must be a global or other static string; it is not copied.
 OPENSSL_mem_debug_pop() removes identifying state from the stack.
 
 At the end of the program, calling CRYPTO_mem_leaks() or
-CRYPTO_mem_leaks_fp() will
-report all "leaked" memory, writing it to the specified BIO B<b>
-or FILE B<fp>.
-Depending on how OpenSSL is built, it may then abort if there
-are any unfree'd allocations, for debugging.
+CRYPTO_mem_leaks_fp() will report all "leaked" memory, writing it
+to the specified BIO B<b> or FILE B<fp>.
+It will then L<abort(3)> if there were any unfree'd allocations.
 
 =head1 RETURN VALUES
 
@@ -154,7 +154,7 @@ CRYPTO_set_mem_functions() and CRYPTO_set_mem_debug()
 return 1 on success or 0 on failure (almost
 always because allocations have already happened).
 
-CRYPTO_mem_ctrl() return the previous value of the flag.
+CRYPTO_mem_ctrl() returns the previous value of the mode.
 
 OPENSSL_mem_debug_push() and OPENSSL_mem_debug_pop()
 return 1 on success or 0 on failure.
index 2d1a98327a4904ffd816b003f8cf22f115d5e654..5de0f504db14ee4c831f2bc5fa1ead08a5e76bda 100644 (file)
@@ -249,10 +249,10 @@ typedef struct {
  * The following can be used to detect memory leaks in the library. If
  * used, it turns on malloc checking
  */
-# define CRYPTO_MEM_CHECK_OFF     0x0
-# define CRYPTO_MEM_CHECK_ON      0x1
-# define CRYPTO_MEM_CHECK_ENABLE  0x2
-# define CRYPTO_MEM_CHECK_DISABLE 0x3
+# define CRYPTO_MEM_CHECK_OFF     0x0   /* Control only */
+# define CRYPTO_MEM_CHECK_ON      0x1   /* Control and mode bit */
+# define CRYPTO_MEM_CHECK_ENABLE  0x2   /* Control and mode bit */
+# define CRYPTO_MEM_CHECK_DISABLE 0x3   /* Control only */
 
 /* predec of the BIO type */
 typedef struct bio_st BIO_dummy;
@@ -291,20 +291,9 @@ DEFINE_STACK_OF(void)
 #define OPENSSL_malloc_init() \
     CRYPTO_set_mem_functions(CRYPTO_malloc, CRYPTO_realloc, CRYPTO_free)
 
-/*
- * Set standard debugging functions (not done by default unless CRYPTO_MDEBUG
- * is defined)
- */
-# if defined(CRYPTO_MDEBUG_ABORT) && !defined(CRYPTO_MDEBUG)
-#  define CRYPTO_MDEBUG
-# endif
-# ifndef CRYPTO_MDEBUG
-#  define OPENSSL_NO_CRYPTO_MDEBUG
-# endif
-
 int CRYPTO_mem_ctrl(int mode);
 
-# ifdef CRYPTO_MDEBUG
+# ifndef OPENSSL_NO_CRYPTO_MDEBUG
 #  define OPENSSL_malloc(num) \
         CRYPTO_malloc(num, __FILE__, __LINE__)
 #  define OPENSSL_zalloc(num) \
index 289ca1e57275db171fa0453802f623f461be378c..9cb563c548541a94e5637d3a8b71491335ce0ec9 100644 (file)
@@ -211,7 +211,7 @@ int main(int argc, char *argv[])
     ERR_remove_thread_state(NULL);
     EVP_cleanup();
     CRYPTO_cleanup_all_ex_data();
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks(err);
 #endif
     BIO_free(err);
index 02d0f79efc82b64fd3076e0174199e188026a899..09156a6991b4853ce9835a175ca9d8db83391051 100644 (file)
@@ -526,7 +526,7 @@ end:
     ERR_free_strings();
     ERR_remove_thread_state(NULL);
     EVP_cleanup();
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks(bio_err);
 #endif
     BIO_free(bio_err);
index 81c36cb48afd0c80f17f6fc6ec599b9253fab5b7..8190e6f2eedad60e8789895cafbdd9dda8478b19 100644 (file)
@@ -215,7 +215,7 @@ int main(int argc, char **argv)
     CRYPTO_cleanup_all_ex_data();
     ERR_remove_thread_state(NULL);
     ERR_free_strings();
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks(bio_err);
 #endif
     BIO_free(bio_err);
index c299c32d95939411bd917af8a945ad5dfcf19d37..8be4e500940c2017681383940b8014dda42d4f1d 100644 (file)
@@ -516,7 +516,7 @@ int main(int argc, char *argv[])
     BIO_free(out);
     CRYPTO_cleanup_all_ex_data();
     ERR_remove_thread_state(NULL);
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks_fp(stderr);
 #endif
     EXIT(ret);
index 2e85d5e04bb016aa05bf7f4a3068ca6bb2b87b56..5a27a38a9a281c443f23c69bcdfa0395de4aae19 100644 (file)
@@ -545,7 +545,7 @@ int main(void)
     CRYPTO_cleanup_all_ex_data();
     ERR_remove_thread_state(NULL);
     ERR_free_strings();
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks(out);
 #endif
     BIO_free(out);
index 96677723150bfcd158b09ddae77dfb95b51730af..fbf5081f897c9665f9996114a6a6a778e9c13db8 100644 (file)
@@ -1664,7 +1664,7 @@ int main(int argc, char *argv[])
     CRYPTO_cleanup_all_ex_data();
     ERR_free_strings();
     ERR_remove_thread_state(NULL);
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks_fp(stderr);
 #endif
 
index f5924e07b65ed6c047f864b8578960fd8a9e4115..32df0e45fc23b8d9e8702da49be0135d2be5f8a9 100644 (file)
@@ -249,7 +249,7 @@ int main(int argc, char *argv[])
     CRYPTO_cleanup_all_ex_data();
     ERR_free_strings();
     ERR_remove_thread_state(NULL);
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks_fp(stderr);
 #endif
     return to_return;
index 0d6ad03eb387d255e8afa1b049ce2cfdb4d4aa3a..13dd26270572a4369384aaa989c1a59af1f9b512 100644 (file)
@@ -466,7 +466,7 @@ int main(void)
     CRYPTO_cleanup_all_ex_data();
     ERR_remove_thread_state(NULL);
     ERR_free_strings();
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks_fp(stderr);
 #endif
 
index 91caa4fc251dce2b7d57628b978511fd6a085120..c8d1f60eaf46142a9d899f560366addf9ce404ae 100644 (file)
@@ -610,7 +610,7 @@ int main(int argc, char **argv)
     CRYPTO_cleanup_all_ex_data();
     ERR_remove_thread_state(NULL);
     ERR_free_strings();
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks_fp(stderr);
 #endif
     if (t.errors)
index 53286d89243e950c7930c43a6a8278ba65a5298e..5fdcc3800e6039bf5180b870ee31691f9a9b60f6 100644 (file)
@@ -300,7 +300,7 @@ int main(int argc, char *argv[])
     BN_free(m);
     BN_CTX_free(ctx);
     ERR_remove_thread_state(NULL);
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks(out);
 #endif
     BIO_free(out);
index cccbcf6625b55ba306f4a3380a0ed65bc7b25a79..cdb61a3608f7cbfe6659a7c24963f9a82f12a8c8 100644 (file)
 #include <string.h>
 #include <openssl/bio.h>
 #include <openssl/crypto.h>
+#include <setjmp.h>
+
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
+static sigjmp_buf env;
+
+static void handler(int sig)
+{
+    siglongjmp(env, 1);
+}
+#endif
 
 int main(int argc, char **argv)
 {
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     char *p;
     char *lost;
+    int aborted = 0;
 
     p = getenv("OPENSSL_DEBUG_MEMORY");
     if (p != NULL && strcmp(p, "on") == 0)
@@ -74,15 +85,19 @@ int main(int argc, char **argv)
         return 1;
     }
 
-    if (argv[1] && strcmp(argv[1], "freeit") == 0)
+    signal(SIGABRT, handler);
+
+    if (argv[1] && strcmp(argv[1], "freeit") == 0) {
         OPENSSL_free(lost);
+        lost = NULL;
+    }
 
-    CRYPTO_mem_leaks_fp(stderr);
-    return 0;
+    if (sigsetjmp(env, 0) == 0)
+        CRYPTO_mem_leaks_fp(stderr);
+    else
+        aborted = 1;
+    return ((lost != NULL) ^ (aborted == 1));
 #else
-    if (argv[1] && strcmp(argv[1], "freeit") == 0)
-        return 0;
-    fprintf(stderr, "Leak simulated\n");
-    return 1;
+    return 0;
 #endif
 }
index 657d10e7683882845f23df6ea370d2f0275acc5b..303906fa9cd9dba9f1c662bfee2482ee875d0081 100644 (file)
@@ -205,7 +205,7 @@ int main(int argc, char **argv)
     CRYPTO_cleanup_all_ex_data();
     ERR_remove_thread_state(NULL);
     ERR_free_strings();
-# ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks_fp(stderr);
 # endif
     return 0;
index 7aff0c011b206ff199bc7da3f7ae30951ddfb437..bc72f2e6dcf6a554e320c3cd78f2a910ad52924c 100644 (file)
@@ -3,5 +3,6 @@
 use OpenSSL::Test;
 
 setup("test_memleak");
-plan tests => 1;
-ok(!run(test(["memleaktest"])), "running memleaktest");
+plan tests => 2;
+ok(run(test(["memleaktest"])), "running leak test");
+ok(run(test(["memleaktest", "freeit"])), "running no leak test");
index 3cfd32edb4e4d595ce81d869cf1831c160890e11..0b707bf715ec7981ce5b43a3680d4896ea29e19a 100644 (file)
@@ -327,7 +327,7 @@ int main(int argc, char *argv[])
     CRYPTO_cleanup_all_ex_data();
     ERR_remove_thread_state(NULL);
 
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks_fp(stderr);
 #endif
 
index 03e8cf438ad35d2c1a79a5f83ca75754f4d5d9a2..f6555a60e128861ea5ed2509bd5e3c1537557398 100644 (file)
@@ -146,7 +146,7 @@ int main(int argc, char **argv)
     CRYPTO_cleanup_all_ex_data();
     ERR_remove_thread_state(NULL);
     ERR_free_strings();
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks(bio_err);
 #endif
     BIO_free(bio_err);
index c3d655e36f2deaecba844de2202f7cb8bdb4133f..d6b6618cbd73335d8735355de93b9f7a433f43c7 100644 (file)
@@ -1821,7 +1821,7 @@ int main(int argc, char *argv[])
     ERR_free_strings();
     ERR_remove_thread_state(NULL);
     EVP_cleanup();
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks(bio_err);
 #endif
     BIO_free(bio_err);
index 005fae63c01f1266303a0a17ae19c8712b444ffa..843252051ddfa6fd5e5e51b21770665043d0f619 100644 (file)
@@ -207,7 +207,7 @@ int main(int argc, char **argv)
     CRYPTO_cleanup_all_ex_data();
     ERR_remove_thread_state(NULL);
     ERR_free_strings();
-#ifdef CRYPTO_MDEBUG
+#ifndef OPENSSL_NO_CRYPTO_MDEBUG
     CRYPTO_mem_leaks_fp(stderr);
 #endif
 
index 03c8d805752b6ceebd0ec6a23d10048cc434744f..f26acbb27fedee7bb6299ef8278b599a56a6752b 100755 (executable)
@@ -124,7 +124,6 @@ foreach (@known_algorithms) {
     $disabled_algorithms{$_} = 0;
 }
 # disabled by default
-$disabled_algorithms{"CRYPTO_MDEBUG"} = 1;
 $disabled_algorithms{"STATIC_ENGINE"} = 1;
 
 my $options="";
index d24f7b72913cb2f1e23c893b1a7a16f212e28808..60ffc25930fcde68701b06256114ce7dfabe759b 100644 (file)
@@ -11,7 +11,7 @@ $rm='/bin/rm -f';
 
 $cc='gcc';
 if ($debug)
-       { $cflags="-g2 -ggdb -DREF_CHECK -DCRYPTO_MDEBUG"; }
+       { $cflags="-g2 -ggdb -DREF_CHECK"; }
 elsif ($profile)
        { $cflags="-pg -O3"; }
 else
index ea370c71f9687dd7b493258ae8c442c44357433a..c5e3be861c5fef360b8b8af97454739d2efd1a0c 100644 (file)
@@ -11,7 +11,7 @@ $rm='/bin/rm -f';
 
 $cc='cc';
 if ($debug)
-       { $cflags="-g -DREF_CHECK -DCRYPTO_MDEBUG"; }
+       { $cflags="-g -DREF_CHECK"; }
 else
        { $cflags="-O2"; }