diff options
author | Rich Salz <rsalz@openssl.org> | 2015-04-27 12:29:39 -0400 |
---|---|---|
committer | Rich Salz <rsalz@openssl.org> | 2015-04-27 12:29:39 -0400 |
commit | 31b222da1ea6fadd22f5cb134f6ba289f81a2adc (patch) | |
tree | 78e80046ec74aa2148bcfb9fb734e109e589ab8a | |
parent | a4d5269e6d0dba0c276c968448a3576f7604666a (diff) |
CRYPTO_mem_leaks should ignore it's BIO argument.
CRYPTO_mem_leaks takes a BIO* argument. It's not a leak if that
argument hasn't been free'd.
Reviewed-by: Richard Levitte <levitte@openssl.org>
-rw-r--r-- | apps/openssl.c | 3 | ||||
-rw-r--r-- | crypto/mem_dbg.c | 12 |
2 files changed, 12 insertions, 3 deletions
diff --git a/apps/openssl.c b/apps/openssl.c index b42d031011..786f5d3df8 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -527,8 +527,7 @@ int main(int argc, char *argv[]) BIO_free(bio_in); BIO_free_all(bio_out); apps_shutdown(); - /*CRYPTO_mem_leaks(bio_err); - */ + CRYPTO_mem_leaks(bio_err); BIO_free(bio_err); return (ret); } diff --git a/crypto/mem_dbg.c b/crypto/mem_dbg.c index 982aebbe51..36593ed664 100644 --- a/crypto/mem_dbg.c +++ b/crypto/mem_dbg.c @@ -623,6 +623,7 @@ void CRYPTO_dbg_realloc(void *addr1, void *addr2, int num, typedef struct mem_leak_st { BIO *bio; int chunks; + int seen; long bytes; } MEM_LEAK; @@ -637,8 +638,11 @@ static void print_leak_doall_arg(const MEM *m, MEM_LEAK *l) #define BUF_REMAIN (sizeof buf - (size_t)(bufp - buf)) - if (m->addr == (char *)l->bio) + /* Is one "leak" the BIO we were given? */ + if (m->addr == (char *)l->bio) { + l->seen = 1; return; + } if (options & V_CRYPTO_MDEBUG_TIME) { lcl = localtime(&m->time); @@ -722,8 +726,14 @@ void CRYPTO_mem_leaks(BIO *b) ml.bio = b; ml.bytes = 0; ml.chunks = 0; + ml.seen = 0; if (mh != NULL) lh_MEM_doall_arg(mh, LHASH_DOALL_ARG_FN(print_leak), MEM_LEAK, &ml); + /* Don't count the BIO that was passed in as a "leak" */ + if (ml.seen && ml.chunks >= 1 && ml.bytes >= (int)sizeof (*b)) { + ml.chunks--; + ml.bytes -= (int)sizeof (*b); + } if (ml.chunks != 0) { BIO_printf(b, "%ld bytes leaked in %d chunks\n", ml.bytes, ml.chunks); #ifdef CRYPTO_MDEBUG_ABORT |