From: Richard Levitte Date: Fri, 30 Aug 2019 13:11:08 +0000 (+0200) Subject: PBKDF2 implementation: refactor to avoid memleak X-Git-Tag: openssl-3.0.0-alpha1~1467 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=b1f15129933fdc98134ef2fcafb1ecea710f5920;p=oweals%2Fopenssl.git PBKDF2 implementation: refactor to avoid memleak Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/9662) --- 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); }