From: Dr. Stephen Henson Date: Sun, 8 Feb 2015 13:14:05 +0000 (+0000) Subject: Fix memory leak reporting. X-Git-Tag: OpenSSL_1_0_1m~66 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=66aacf387224e8977d8214437939227d7e0c91d8;p=oweals%2Fopenssl.git Fix memory leak reporting. Free up bio_err after memory leak data has been printed to it. In int_free_ex_data if ex_data is NULL there is nothing to free up so return immediately and don't reallocate it. Reviewed-by: Tim Hudson (cherry picked from commit 9c7a780bbebc1b6d87dc38a6aa3339033911a8bb) --- diff --git a/apps/openssl.c b/apps/openssl.c index 112ed7e602..6873145223 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -428,10 +428,6 @@ int main(int Argc, char *ARGV[]) if (arg.data != NULL) OPENSSL_free(arg.data); - if (bio_err != NULL) { - BIO_free(bio_err); - bio_err = NULL; - } #if defined( OPENSSL_SYS_VMS) && (__INITIAL_POINTER_SIZE == 64) /* Free any duplicate Argv[] storage. */ if (free_Argv) { @@ -440,6 +436,10 @@ int main(int Argc, char *ARGV[]) #endif apps_shutdown(); CRYPTO_mem_leaks(bio_err); + if (bio_err != NULL) { + BIO_free(bio_err); + bio_err = NULL; + } OPENSSL_EXIT(ret); } diff --git a/crypto/ex_data.c b/crypto/ex_data.c index 5a3546a2d2..f96a51781a 100644 --- a/crypto/ex_data.c +++ b/crypto/ex_data.c @@ -500,6 +500,8 @@ static void int_free_ex_data(int class_index, void *obj, CRYPTO_EX_DATA *ad) EX_CLASS_ITEM *item; void *ptr; CRYPTO_EX_DATA_FUNCS **storage = NULL; + if (ex_data == NULL) + return; if ((item = def_get_class(class_index)) == NULL) return; CRYPTO_r_lock(CRYPTO_LOCK_EX_DATA);