[openssl-dev] [openssl.org #3848] [PATCH] Fix memory leak caused by not calling SSL_COMP_free_compression_methods()

Gunnar Kudrjavets via RT rt at openssl.org
Wed May 13 17:44:24 UTC 2015


Hello,

Currently 'apps_shutdown()' in 'openssl.c' isn't freeing the compression
methods. This is causing the CRT debug heap (and I assume various other
tools) to indicate a memory leak. Though OS will free all the resources
when user-mode application exits, it's better to do this explicitly inside
'apps_shutdown()'. As a bonus this change also helps to reach the clean
state where debug heap is happy :-)

Thank you,
Gunnar Kudrjavets


-------------- next part --------------
>From 108f2ef97d866d3750aac0dbe91cffe68e8b5181 Mon Sep 17 00:00:00 2001
From: Gunnar Kudrjavets <gunnarku at microsoft.com>
Date: Wed, 13 May 2015 09:25:02 -0700
Subject: [PATCH] Fix memory leak caused by not calling
 SSL_COMP_free_compression_methods()

Currently 'apps_shutdown()' in 'openssl.c' isn't freeing the compression
methods. This is causing the CRT debug heap (and I assume various other
tools) to indicate a memory leak. Though OS will free all the resources
when user-mode application exits, it's better to do this explicitly inside
'apps_shutdown()'. As a bonus this change also helps to reach the clean
state where debug heap is happy :-)

CRT debug heap indicating that there's a leak:

Detected memory leaks!
Dumping objects ->
{3375} normal block at 0x0AE76FE8, 16 bytes long.
 Data: <                > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
{3374} normal block at 0x079A2FE8, 20 bytes long.
 Data: <     o          > 00 00 00 00 E8 6F E7 0A 00 00 00 00 04 00 00 00
Object dump complete.

Stack trace pointing to the allocation which causes the leak:

0:000> |
.  0	id: 84c	create	name: openssl.exe
0:000> kcn
 #
00 MSVCR120D!_heap_alloc_dbg_impl
01 MSVCR120D!_nh_malloc_dbg_impl
02 MSVCR120D!_nh_malloc_dbg
03 MSVCR120D!malloc
04 LIBEAY32!default_malloc_ex
05 LIBEAY32!CRYPTO_malloc
06 LIBEAY32!sk_new
07 SSLEAY32!load_builtin_compressions
08 SSLEAY32!SSL_COMP_get_compression_methods
09 SSLEAY32!SSL_library_init
0a openssl!apps_startup
0b openssl!main
0c openssl!__tmainCRTStartup
0d openssl!mainCRTStartup
0e KERNEL32!BaseThreadInitThunk
0f ntdll!__RtlUserThreadStart
10 ntdll!_RtlUserThreadStart
---
 apps/openssl.c | 1 +
 1 file changed, 1 insertion(+)

diff --git a/apps/openssl.c b/apps/openssl.c
index fa3b683..952eaa4 100644
--- a/apps/openssl.c
+++ b/apps/openssl.c
@@ -188,6 +188,7 @@ static void apps_shutdown()
     CONF_modules_unload(1);
 #ifndef OPENSSL_NO_COMP
     COMP_zlib_cleanup();
+    SSL_COMP_free_compression_methods();
 #endif
     OBJ_cleanup();
     EVP_cleanup();
-- 
1.9.5.msysgit.1



More information about the openssl-dev mailing list