summaryrefslogtreecommitdiff
path: root/usr/src/lib/libipsecutil/common/ipsec_libssl_setup.c
diff options
context:
space:
mode:
authorvk199839 <none@none>2008-05-12 15:39:28 -0700
committervk199839 <none@none>2008-05-12 15:39:28 -0700
commite314c1b25a1c3ec434b6194614d9dbff72462046 (patch)
tree121618019149985f271b2391d3c327267ee00e8a /usr/src/lib/libipsecutil/common/ipsec_libssl_setup.c
parentdef1108221a2e2bac551a05e9a256a0714286f04 (diff)
downloadillumos-gate-e314c1b25a1c3ec434b6194614d9dbff72462046.tar.gz
6699935 memory leak in print_asn1_name()
Diffstat (limited to 'usr/src/lib/libipsecutil/common/ipsec_libssl_setup.c')
-rw-r--r--usr/src/lib/libipsecutil/common/ipsec_libssl_setup.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/usr/src/lib/libipsecutil/common/ipsec_libssl_setup.c b/usr/src/lib/libipsecutil/common/ipsec_libssl_setup.c
index 91a3d0c787..0e08277e4b 100644
--- a/usr/src/lib/libipsecutil/common/ipsec_libssl_setup.c
+++ b/usr/src/lib/libipsecutil/common/ipsec_libssl_setup.c
@@ -91,6 +91,7 @@ static void (*SSL_load_error_strings_fn)() = NULL;
static void (*ERR_free_strings_fn)() = NULL;
static void (*CRYPTO_set_locking_callback_fn)() = NULL;
static void (*CRYPTO_set_id_callback_fn)() = NULL;
+static void (*OPENSSL_free_fn)() = NULL;
static void solaris_locking_callback(int, int, char *, int);
static unsigned long solaris_thread_id(void);
@@ -155,6 +156,11 @@ libssl_load()
if (CRYPTO_set_id_callback_fn == NULL)
goto libssl_err;
+ OPENSSL_free_fn = (void(*)())dlsym(dldesc,
+ "OPENSSL_free");
+ if (OPENSSL_free_fn == NULL)
+ goto libssl_err;
+
thread_setup();
libssl_loaded = B_TRUE;
@@ -234,6 +240,7 @@ print_asn1_name(FILE *file, const unsigned char *buf, long buflen)
(void) X509_NAME_print_ex_fp_fn(file, x509, 0,
(ASN1_STRFLGS_RFC2253 | ASN1_STRFLGS_ESC_QUOTE |
XN_FLAG_SEP_CPLUS_SPC | XN_FLAG_FN_SN));
+ OPENSSL_free_fn(p);
(void) fprintf(file, "\n");
} else {
char errbuf[80];