From ef8ca6bd544e4baea67f9a193ae896b8629944d0 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Sun, 14 Feb 2016 12:16:52 +0100 Subject: [PATCH] Make the use of mdebug backtrace a separate option To force it on anyone using --strict-warnings was the wrong move, as this is an option best left to those who know what they're doing. Use with care! Reviewed-by: Andy Polyakov --- Configure | 28 ++++++++++++++++------------ crypto/mem_dbg.c | 11 ++++++----- 2 files changed, 22 insertions(+), 17 deletions(-) diff --git a/Configure b/Configure index 8bdf92c9d2..1077371a35 100755 --- a/Configure +++ b/Configure @@ -109,9 +109,9 @@ my $clang_devteam_warn = "" . " -Wmissing-variable-declarations" ; -# These are used in addition to $gcc_devteam_warn unless this is a mingw build. -# This adds backtrace information to the memory leak info. -my $memleak_devteam_backtrace = "-rdynamic -DCRYPTO_MDEBUG_BACKTRACE"; +# This adds backtrace information to the memory leak info. Is only used +# when crypto-mdebug-backtrace is enabled. +my $memleak_devteam_backtrace = "-rdynamic"; my $strict_warnings = 0; @@ -252,6 +252,7 @@ my @disablables = ( "cms", "comp", "crypto-mdebug", + "crypto-mdebug-backtrace", "ct", "deprecated", "des", @@ -377,6 +378,8 @@ my @disable_cascades = ( # SRP and HEARTBEATS require TLSEXT "tlsext" => [ "srp", "heartbeats" ], + + "crypto-mdebug" => [ "crypto-mdebug-backtrace" ], ); # Avoid protocol support holes. Also disable all versions below N, if version @@ -1162,16 +1165,17 @@ if ($strict_warnings) $config{cflags} .= " $wopt" unless ($config{cflags} =~ /(^|\s)$wopt(\s|$)/) } } - if ($target !~ /^mingw/) + } + +unless ($disabled{"crypto-mdebug-backtrace"}) + { + foreach my $wopt (split /\s+/, $memleak_devteam_backtrace) { - foreach $wopt (split /\s+/, $memleak_devteam_backtrace) - { - $config{cflags} .= " $wopt" unless ($config{cflags} =~ /(^|\s)$wopt(\s|$)/) - } - if ($target =~ /^BSD-/) - { - $config{ex_libs} .= " -lexecinfo"; - } + $config{cflags} .= " $wopt" unless ($config{cflags} =~ /(^|\s)$wopt(\s|$)/) + } + if ($target =~ /^BSD-/) + { + $config{ex_libs} .= " -lexecinfo"; } } diff --git a/crypto/mem_dbg.c b/crypto/mem_dbg.c index adabb2db95..b905fabfa1 100644 --- a/crypto/mem_dbg.c +++ b/crypto/mem_dbg.c @@ -116,7 +116,8 @@ #include #include #include -#if defined(CRYPTO_MDEBUG_BACKTRACE) && defined(__GNUC__) + +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE # include #endif @@ -171,7 +172,7 @@ struct mem_st { unsigned long order; time_t time; APP_INFO *app_info; -#if defined(CRYPTO_MDEBUG_BACKTRACE) && defined(__GNUC__) +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE void *array[30]; size_t array_siz; #endif @@ -445,7 +446,7 @@ void CRYPTO_mem_debug_malloc(void *addr, size_t num, int before_p, m->order = order; } m->order = order++; -# if defined(CRYPTO_MDEBUG_BACKTRACE) && defined(__GNUC__) +# ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE m->array_siz = backtrace(m->array, OSSL_NELEM(m->array)); # endif m->time = time(NULL); @@ -525,7 +526,7 @@ void CRYPTO_mem_debug_realloc(void *addr1, void *addr2, size_t num, if (mp != NULL) { mp->addr = addr2; mp->num = num; -#if defined(CRYPTO_MDEBUG_BACKTRACE) && defined(__GNUC__) +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE mp->array_siz = backtrace(mp->array, OSSL_NELEM(mp->array)); #endif (void)lh_MEM_insert(mh, mp); @@ -618,7 +619,7 @@ static void print_leak(const MEM *m, MEM_LEAK *l) while (amip && !CRYPTO_THREADID_cmp(&amip->threadid, &ti)); } -#if defined(CRYPTO_MDEBUG_BACKTRACE) && defined(__GNUC__) +#ifndef OPENSSL_NO_CRYPTO_MDEBUG_BACKTRACE { size_t i; char **strings = backtrace_symbols(m->array, m->array_siz);