From 0b2f0475349d71ae31c1c4e4df504c9583023adb Mon Sep 17 00:00:00 2001 From: Ludwig Krispenz Date: Jun 27 2019 07:26:13 +0000 Subject: Ticket 50472 - memory leak with encryption Bug: In ssl initialization a lot of memory is allocated by calls to nss functions and not freed Fix: free all allocations reported by asan Reviewed by: Mark, thanks --- diff --git a/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c b/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c index 19ee67e..cdf337b 100644 --- a/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c +++ b/ldap/servers/slapd/back-ldbm/ldbm_attrcrypt.c @@ -605,6 +605,9 @@ attrcrypt_cleanup(attrcrypt_cipher_state *acs) if (acs->slot) { slapd_pk11_FreeSlot(acs->slot); } + if (acs->cipher_lock) { + PR_DestroyLock(acs->cipher_lock); + } slapi_log_err(SLAPI_LOG_TRACE, "attrcrypt_cleanup", "<-\n"); return 0; } diff --git a/ldap/servers/slapd/ssl.c b/ldap/servers/slapd/ssl.c index a89b1de..9d27814 100644 --- a/ldap/servers/slapd/ssl.c +++ b/ldap/servers/slapd/ssl.c @@ -2686,8 +2686,9 @@ listCerts(CERTCertDBHandle *handle, CERTCertificate *cert, PK11SlotInfo *slot __ /* now get the subjectList that matches this cert */ data.data = the_cert->derCert.data; data.len = the_cert->derCert.len; - PR_fprintf(outfile, "\n%s\n%s\n%s\n", NS_CERT_HEADER, - BTOA_DataToAscii(data.data, data.len), NS_CERT_TRAILER); + char *data2ascii = BTOA_DataToAscii(data.data, data.len); + PR_fprintf(outfile, "\n%s\n%s\n%s\n", NS_CERT_HEADER, data2ascii, NS_CERT_TRAILER); + PORT_Free(data2ascii); rv = SECSuccess; } if (certs) { @@ -3195,6 +3196,21 @@ bail: if (arenaForPKI) { PORT_FreeArena(arenaForPKI, PR_FALSE); } + if (privkey) { + slapd_pk11_DestroyPrivateKey(privkey); + } + if (pubkey) { + slapd_pk11_DestroyPublicKey(pubkey); + } + if (subject) { + CERT_DestroyName(subject); + } + if (epki) { + SECKEY_DestroyEncryptedPrivateKeyInfo(epki, PR_TRUE); + } + if (b64) { + PORT_Free(b64); + } memset(randomPassword, 0, strlen((const char *)randomPassword)); #endif return rv;