]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Correctly dealing with refcount in EVP_SKEY
authorDmitry Belyavskiy <beldmit@gmail.com>
Fri, 29 Aug 2025 13:42:04 +0000 (15:42 +0200)
committerNeil Horman <nhorman@openssl.org>
Sun, 31 Aug 2025 01:11:06 +0000 (21:11 -0400)
Reviewed-by: Tim Hudson <tjh@openssl.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Neil Horman <nhorman@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/28369)

crypto/evp/s_lib.c

index b8cf42260c0cdbed7fa1f0d3aa46e2360c2c2937..15d16a05a60c6e7441c0716fc688076d563b74fe 100644 (file)
@@ -47,8 +47,12 @@ static EVP_SKEY *evp_skey_alloc(EVP_SKEYMGMT *skeymgmt)
         ERR_raise(ERR_LIB_EVP, ERR_R_CRYPTO_LIB);
         goto err;
     }
-    skey->skeymgmt = skeymgmt;
-    return skey;
+    if (EVP_SKEYMGMT_up_ref(skeymgmt)) {
+        skey->skeymgmt = skeymgmt;
+        return skey;
+    } else {
+        goto err;
+    }
 
  err:
     CRYPTO_FREE_REF(&skey->references);
@@ -78,8 +82,7 @@ static EVP_SKEY *evp_skey_alloc_fetch(OSSL_LIB_CTX *libctx,
     }
 
     skey = evp_skey_alloc(skeymgmt);
-    if (skey == NULL)
-        EVP_SKEYMGMT_free(skeymgmt);
+    EVP_SKEYMGMT_free(skeymgmt);
 
     return skey;
 }