From c03f18dbcbd52da259f14c1f77879573b5f56cec Mon Sep 17 00:00:00 2001
From: zesstra <zesstra@zesstra.de>
Date: Sun, 4 Oct 2009 22:30:39 +0200
Subject: [PATCH] Register our own allocator functions with openssl.

Use CRYPTO_set_mem_functions() to register pointers to our own allocator
in openssl. Otherwise, openssl may use the system allocator and memory
get used twice. (#677)
(pkg-tls.c)
---
 src/pkg-tls.c |   31 +++++++++++++++++++++++++++++++
 1 files changed, 31 insertions(+), 0 deletions(-)

diff --git a/src/pkg-tls.c b/src/pkg-tls.c
index 543152b..3c9b446 100644
--- a/src/pkg-tls.c
+++ b/src/pkg-tls.c
@@ -257,6 +257,34 @@ tls_verify_callback(int preverify_ok, X509_STORE_CTX *ctx)
 
 /*-------------------------------------------------------------------------*/
 #ifdef HAS_OPENSSL
+
+static void *
+tls_pkg_malloc (size_t size)
+/*
+ * Wrapper function for using our own allocator in openssl.
+ */
+{
+    return pxalloc(size);
+}
+
+static void
+tls_pkg_free (void * ptr)
+/*
+ * Wrapper function for using our own allocator in openssl.
+ */
+{
+    pfree(ptr);
+}
+
+static void *
+tls_pkg_realloc (void * ptr, size_t size)
+/*
+ * Wrapper function for using our own allocator in openssl.
+ */
+{
+    return prexalloc(ptr, size);
+}
+
 void
 tls_verify_init (void)
   
@@ -415,6 +443,9 @@ tls_global_init (void)
     debug_message("%s TLS: (OpenSSL) Keyfile '%s', Certfile '%s'\n"
                  , time_stamp(), keyfile, certfile);
 
+    // first register our own allocator function before calling any Openssl function.
+    CRYPTO_set_mem_functions(tls_pkg_malloc, tls_pkg_realloc, tls_pkg_free);
+
     SSL_load_error_strings();
     ERR_load_BIO_strings();
     if (!SSL_library_init())
-- 
1.6.4.3

