diff options
author | vk199839 <none@none> | 2008-05-12 15:39:28 -0700 |
---|---|---|
committer | vk199839 <none@none> | 2008-05-12 15:39:28 -0700 |
commit | e314c1b25a1c3ec434b6194614d9dbff72462046 (patch) | |
tree | 121618019149985f271b2391d3c327267ee00e8a /usr/src/lib/libipsecutil/common/ipsec_libssl_setup.c | |
parent | def1108221a2e2bac551a05e9a256a0714286f04 (diff) | |
download | illumos-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.c | 7 |
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]; |