From 8fb6c8154b552d0d7d8f160e7a6260f899b94263 Mon Sep 17 00:00:00 2001 From: onexyoung Date: Mon, 23 Dec 2024 14:49:27 +0300 Subject: [PATCH] provider_deactivate(): Check return value of CRYPTO_atomic_add() Reviewed-by: Matt Caswell Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/26249) --- crypto/provider_core.c | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/crypto/provider_core.c b/crypto/provider_core.c index 1b16b279059..6b2a98524d7 100644 --- a/crypto/provider_core.c +++ b/crypto/provider_core.c @@ -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) { /* -- 2.47.2