From 0f9fdefeb05768b86f4364a8e976c87ee197638e Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Thu, 30 Jul 2020 15:15:05 +0100 Subject: [PATCH] Fix an ENGINE leak in asn1_item_digest_with_libctx Commit 6725682d introduced a call to ENGINE_get_digest_engine() into the function asn1_item_digest_with_libctx() to determine whether there is an ENGINE registered to handle the specified digest. However that function increases the ref count on the returned ENGINE object, so it must be freed. Fixes #12558 [extended tests] Reviewed-by: Paul Dale Reviewed-by: Nicola Tuveri (Merged from https://github.com/openssl/openssl/pull/12560) --- crypto/asn1/a_digest.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/crypto/asn1/a_digest.c b/crypto/asn1/a_digest.c index c0c1cda2727..3e7b418a194 100644 --- a/crypto/asn1/a_digest.c +++ b/crypto/asn1/a_digest.c @@ -68,7 +68,11 @@ int asn1_item_digest_with_libctx(const ASN1_ITEM *it, const EVP_MD *md, if (EVP_MD_provider(md) == NULL) { #if !defined(OPENSSL_NO_ENGINE) - if (ENGINE_get_digest_engine(EVP_MD_type(md)) == NULL) + ENGINE *tmpeng = ENGINE_get_digest_engine(EVP_MD_type(md)); + + if (tmpeng != NULL) + ENGINE_finish(tmpeng); + else #endif fetched_md = EVP_MD_fetch(libctx, EVP_MD_name(md), propq); } -- 2.47.2