]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Change evp_keymgmt_util_clear_operation_cache return type to void
authorJohnnySavages <drokov@rutoken.ru>
Fri, 19 Dec 2025 06:05:07 +0000 (01:05 -0500)
committerPauli <paul.dale@oracle.com>
Tue, 20 Jan 2026 22:15:07 +0000 (09:15 +1100)
Found by Linux Verification Center (linuxtesting.org) with SVACE.

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Frederik Wedel-Heinen <fwh.openssl@gmail.com>
Reviewed-by: Paul Dale <paul.dale@oracle.com>
(Merged from https://github.com/openssl/openssl/pull/29458)

crypto/evp/keymgmt_lib.c
crypto/evp/p_lib.c
doc/internal/man3/evp_keymgmt_util_export_to_provider.pod
include/crypto/evp.h

index 04ac443aada61d9d894328578c8ef92fc1976c3f..c4b08c0ed682fce35ad61e8f6e5bee7243523049 100644 (file)
@@ -219,14 +219,13 @@ static void op_cache_free(OP_CACHE_ELEM *e)
     OPENSSL_free(e);
 }
 
-int evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk)
+void evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk)
 {
-    if (pk != NULL) {
-        sk_OP_CACHE_ELEM_pop_free(pk->operation_cache, op_cache_free);
-        pk->operation_cache = NULL;
-    }
+    if (pk == NULL)
+        return;
 
-    return 1;
+    sk_OP_CACHE_ELEM_pop_free(pk->operation_cache, op_cache_free);
+    pk->operation_cache = NULL;
 }
 
 OP_CACHE_ELEM *evp_keymgmt_util_find_operation_cache(EVP_PKEY *pk,
index ab5ad82d08b687cb7a91f362e32924ab6b0a826a..b784e243df0103bb3a4257ed6ae9f4d471c28ee0 100644 (file)
@@ -1921,14 +1921,10 @@ void *evp_pkey_export_to_provider(EVP_PKEY *pk, OSSL_LIB_CTX *libctx,
 
         if (!CRYPTO_THREAD_write_lock(pk->lock))
             goto end;
-        if (pk->ameth->dirty_cnt(pk) != pk->dirty_cnt_copy
-            && !evp_keymgmt_util_clear_operation_cache(pk)) {
-            CRYPTO_THREAD_unlock(pk->lock);
-            evp_keymgmt_freedata(tmp_keymgmt, keydata);
-            keydata = NULL;
-            EVP_KEYMGMT_free(tmp_keymgmt);
-            goto end;
-        }
+
+        if (pk->ameth->dirty_cnt(pk) != pk->dirty_cnt_copy)
+            evp_keymgmt_util_clear_operation_cache(pk);
+
         EVP_KEYMGMT_free(tmp_keymgmt); /* refcnt-- */
 
         /* Check to make sure some other thread didn't get there first */
index 5823cd200f5a38fe171a28290b61ac02bada4422..8f5397d6c2a4e553b94efa6ed8edb2496011bf49 100644 (file)
@@ -25,7 +25,7 @@ OP_CACHE_ELEM
  OP_CACHE_ELEM *evp_keymgmt_util_find_operation_cache(EVP_PKEY *pk,
                                                       EVP_KEYMGMT *keymgmt,
                                                       int selection);
int evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk);
void evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk);
  int evp_keymgmt_util_cache_keydata(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt,
                                     void *keydata, int selection);
  void evp_keymgmt_util_cache_keyinfo(EVP_PKEY *pk);
@@ -81,8 +81,7 @@ evp_keymgmt_util_find_operation_cache() returns a pointer to the
 operation cache slot.  If I<keymgmt> is NULL, or if there is no slot
 with a match for I<keymgmt>, NULL is returned.
 
-evp_keymgmt_util_cache_keydata() and evp_keymgmt_util_clear_operation_cache()
-return 1 on success or 0 otherwise.
+evp_keymgmt_util_cache_keydata() return 1 on success or 0 otherwise.
 
 =head1 NOTES
 
index 85e13e520b8cf2df7d699f0496d5c33647a979c9..021fac3df118b21e9af971a5aaed43d435c08bff 100644 (file)
@@ -535,7 +535,7 @@ void *evp_keymgmt_util_export_to_provider(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt,
 OP_CACHE_ELEM *evp_keymgmt_util_find_operation_cache(EVP_PKEY *pk,
     EVP_KEYMGMT *keymgmt,
     int selection);
-int evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk);
+void evp_keymgmt_util_clear_operation_cache(EVP_PKEY *pk);
 int evp_keymgmt_util_cache_keydata(EVP_PKEY *pk, EVP_KEYMGMT *keymgmt,
     void *keydata, int selection);
 void evp_keymgmt_util_cache_keyinfo(EVP_PKEY *pk);