Commit c3cb4f142b for openssl.org

commit c3cb4f142bacab224c3a72489fc27ca608aa1ef7
Author: ndossche <niels.dossche@ugent.be>
Date:   Wed Sep 9 22:50:53 2026 +0200

    Fix memory leak on error on OSSL_PROVIDER_available()

    `ossl_provider_free` must be called, but the `CRYPTO_THREAD_read_lock`
    error path does not do this. By inverting the condition and
    restructuring the code we can solve this cleanly without introducing a
    goto.

    Reviewed-by: Frederik Wedel-Heinen <fwh.openssl@gmail.com>
    Reviewed-by: Todd Short <todd.short@me.com>
    Merge-date: Wed Sep 16 13:40:31 2026
    Merged-from: https://github.com/openssl/openssl/pull/32775

diff --git a/crypto/provider_core.c b/crypto/provider_core.c
index c3349881ef..127cb4a23c 100644
--- a/crypto/provider_core.c
+++ b/crypto/provider_core.c
@@ -1675,10 +1675,10 @@ int OSSL_PROVIDER_available(OSSL_LIB_CTX *libctx, const char *name)

     prov = ossl_provider_find(libctx, name, 0);
     if (prov != NULL) {
-        if (!CRYPTO_THREAD_read_lock(prov->flag_lock))
-            return 0;
-        available = prov->flag_activated;
-        CRYPTO_THREAD_unlock(prov->flag_lock);
+        if (CRYPTO_THREAD_read_lock(prov->flag_lock)) {
+            available = prov->flag_activated;
+            CRYPTO_THREAD_unlock(prov->flag_lock);
+        }
         ossl_provider_free(prov);
     }
     return available;