]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
evp_keymgmt_util_copy: Fix possible leak on copy failure
authorTomas Mraz <tomas@openssl.org>
Thu, 11 Mar 2021 12:29:42 +0000 (13:29 +0100)
committerTomas Mraz <tomas@openssl.org>
Wed, 17 Mar 2021 13:39:16 +0000 (14:39 +0100)
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/14511)

crypto/evp/keymgmt_lib.c

index 4f0dc2d4a79634ad808ef91a6af9a9fa95beaafa..872a63ae4743fe85f55138676256d7f4353f0a64 100644 (file)
@@ -455,8 +455,10 @@ int evp_keymgmt_util_copy(EVP_PKEY *to, EVP_PKEY *from, int selection)
          * implemented, so just copy and be done
          */
         if (!evp_keymgmt_copy(to_keymgmt, to_keydata, from->keydata,
-                              selection))
+                              selection)) {
+            evp_keymgmt_freedata(to_keymgmt, alloc_keydata);
             return 0;
+        }
     } else if (match_type(to_keymgmt, from->keymgmt)) {
         struct evp_keymgmt_util_try_import_data_st import_data;
 
@@ -466,10 +468,8 @@ int evp_keymgmt_util_copy(EVP_PKEY *to, EVP_PKEY *from, int selection)
 
         if (!evp_keymgmt_util_export(from, selection,
                                      &evp_keymgmt_util_try_import,
-                                     &import_data)) {
-            evp_keymgmt_freedata(to_keymgmt, alloc_keydata);
+                                     &import_data))
             return 0;
-        }
 
         /*
          * In case to_keydata was previously unallocated,