summaryrefslogtreecommitdiff
path: root/crypto/evp
diff options
context:
space:
mode:
authorK1 <dongbeiouba@gmail.com>2022-06-08 16:41:16 +0800
committerTodd Short <todd.short@me.com>2022-06-15 10:53:04 -0400
commit115eb945acd9a27bf81c6c8923f43768f9e487a8 (patch)
tree7a42d1643286c14c70bd4a244dc5a9256612abce /crypto/evp
parent01fc9b6bce82f0534d6673659a0e59a71f57ee82 (diff)
downloadopenssl-new-115eb945acd9a27bf81c6c8923f43768f9e487a8.tar.gz
Fix a mem leak in evp_pkey_export_to_provider
If keymgmt is NULL, tmp_keymgmt is allocated and will not be freed. Reviewed-by: Tomas Mraz <tomas@openssl.org> Reviewed-by: Paul Yang <kaishen.yy@antfin.com> Reviewed-by: Todd Short <todd.short@me.com> (Merged from https://github.com/openssl/openssl/pull/18499)
Diffstat (limited to 'crypto/evp')
-rw-r--r--crypto/evp/p_lib.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/crypto/evp/p_lib.c b/crypto/evp/p_lib.c
index db1822f0d1..8d2eee11f1 100644
--- a/crypto/evp/p_lib.c
+++ b/crypto/evp/p_lib.c
@@ -1853,7 +1853,7 @@ void *evp_pkey_export_to_provider(EVP_PKEY *pk, OSSL_LIB_CTX *libctx,
if (ctx == NULL)
goto end;
- tmp_keymgmt = ctx->keymgmt;
+ allocated_keymgmt = tmp_keymgmt = ctx->keymgmt;
ctx->keymgmt = NULL;
EVP_PKEY_CTX_free(ctx);
}
@@ -1966,8 +1966,10 @@ void *evp_pkey_export_to_provider(EVP_PKEY *pk, OSSL_LIB_CTX *libctx,
if (keydata == NULL)
tmp_keymgmt = NULL;
- if (keymgmt != NULL)
+ if (keymgmt != NULL && tmp_keymgmt != NULL) {
*keymgmt = tmp_keymgmt;
+ allocated_keymgmt = NULL;
+ }
EVP_KEYMGMT_free(allocated_keymgmt);
return keydata;