From b1f15129933fdc98134ef2fcafb1ecea710f5920 Mon Sep 17 00:00:00 2001 From: Richard Levitte Date: Fri, 30 Aug 2019 15:11:08 +0200 Subject: [PATCH] PBKDF2 implementation: refactor to avoid memleak Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/9662) --- providers/common/kdfs/pbkdf2.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/providers/common/kdfs/pbkdf2.c b/providers/common/kdfs/pbkdf2.c index 27bf28a89b..e60f0126f7 100644 --- a/providers/common/kdfs/pbkdf2.c +++ b/providers/common/kdfs/pbkdf2.c @@ -75,11 +75,19 @@ static void *kdf_pbkdf2_new(void *provctx) return ctx; } +static void kdf_pbkdf2_cleanup(KDF_PBKDF2 *ctx) +{ + EVP_MD_meth_free(ctx->md); + OPENSSL_free(ctx->salt); + OPENSSL_clear_free(ctx->pass, ctx->pass_len); + memset(ctx, 0, sizeof(*ctx)); +} + static void kdf_pbkdf2_free(void *vctx) { KDF_PBKDF2 *ctx = (KDF_PBKDF2 *)vctx; - kdf_pbkdf2_reset(ctx); + kdf_pbkdf2_cleanup(ctx); OPENSSL_free(ctx); } @@ -87,10 +95,7 @@ static void kdf_pbkdf2_reset(void *vctx) { KDF_PBKDF2 *ctx = (KDF_PBKDF2 *)vctx; - EVP_MD_meth_free(ctx->md); - OPENSSL_free(ctx->salt); - OPENSSL_clear_free(ctx->pass, ctx->pass_len); - memset(ctx, 0, sizeof(*ctx)); + kdf_pbkdf2_cleanup(ctx); kdf_pbkdf2_init(ctx); } -- 2.25.1