evp: address a use after free state when using HMAC and MD copy.
authorPauli <pauli@openssl.org>
Mon, 13 Dec 2021 01:16:18 +0000 (12:16 +1100)
committerPauli <pauli@openssl.org>
Fri, 17 Dec 2021 03:39:20 +0000 (14:39 +1100)
Fixes #17261

Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/17263)

crypto/evp/digest.c

index 7ebb2e323527a13c0a05e81268c95f3ba4317960..322cfe7646152a9af6f5a7a473dc6fb2d9b7ae2d 100644 (file)
@@ -521,7 +521,7 @@ int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in)
         if (out->fetched_digest != NULL)
             EVP_MD_free(out->fetched_digest);
         *out = *in;
-        return 1;
+        goto clone_pkey;
     }
 
     if (in->digest->prov == NULL
@@ -552,6 +552,7 @@ int EVP_MD_CTX_copy_ex(EVP_MD_CTX *out, const EVP_MD_CTX *in)
         }
     }
 
+ clone_pkey:
     /* copied EVP_MD_CTX should free the copied EVP_PKEY_CTX */
     EVP_MD_CTX_clear_flags(out, EVP_MD_CTX_FLAG_KEEP_PKEY_CTX);
 #ifndef FIPS_MODULE