]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
provider_deactivate(): Check return value of CRYPTO_atomic_add()
authoronexyoung <artem.bartel@gmail.com>
Mon, 23 Dec 2024 11:49:27 +0000 (14:49 +0300)
committerTomas Mraz <tomas@openssl.org>
Fri, 17 Jan 2025 10:36:26 +0000 (11:36 +0100)
Reviewed-by: Matt Caswell <matt@openssl.org>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/26249)

crypto/provider_core.c

index 1b16b2790592fd0be60c9e3ed1aa71cd4e7296dc..6b2a98524d7d7b8f32238fc1e540338fd5ecf88c 100644 (file)
@@ -1111,7 +1111,14 @@ static int provider_deactivate(OSSL_PROVIDER *prov, int upcalls,
         return -1;
     }
 
-    CRYPTO_atomic_add(&prov->activatecnt, -1, &count, prov->activatecnt_lock);
+    if (!CRYPTO_atomic_add(&prov->activatecnt, -1, &count, prov->activatecnt_lock)) {
+        if (lock) {
+            CRYPTO_THREAD_unlock(prov->flag_lock);
+            CRYPTO_THREAD_unlock(store->lock);
+        }
+        return -1;
+    }
+
 #ifndef FIPS_MODULE
     if (count >= 1 && prov->ischild && upcalls) {
         /*