From 8925d2010d93ff6bc7119f6efc284384ec23efd4 Mon Sep 17 00:00:00 2001 From: Jouni Malinen Date: Wed, 8 May 2019 18:53:32 +0300 Subject: [PATCH] OpenSSL: Fix memory leak in crypto_dh_derive_secret() BN_clear() does not free the BIGNUM; it only clears its value. Fix this memory leak by using the appropriate BN_clear_free() function instead. Fixes: b11fa98bcb8a ("Add explicit checks for peer's DH public key") Signed-off-by: Jouni Malinen --- src/crypto/crypto_openssl.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/crypto/crypto_openssl.c b/src/crypto/crypto_openssl.c index 633199099..fb278c2d2 100644 --- a/src/crypto/crypto_openssl.c +++ b/src/crypto/crypto_openssl.c @@ -570,8 +570,8 @@ int crypto_dh_derive_secret(u8 generator, const u8 *prime, size_t prime_len, failed = !q || !ctx || !tmp || !BN_mod_exp(tmp, pub, q, p, ctx) || !BN_is_one(tmp); - BN_clear(q); - BN_clear(tmp); + BN_clear_free(q); + BN_clear_free(tmp); BN_CTX_free(ctx); if (failed) goto fail; @@ -580,8 +580,8 @@ int crypto_dh_derive_secret(u8 generator, const u8 *prime, size_t prime_len, res = crypto_mod_exp(pubkey, pubkey_len, privkey, privkey_len, prime, prime_len, secret, len); fail: - BN_clear(pub); - BN_clear(p); + BN_clear_free(pub); + BN_clear_free(p); return res; }