]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
ossl_provider_add_to_store: Avoid use-after-free
authorTomas Mraz <tomas@openssl.org>
Thu, 16 Dec 2021 15:24:44 +0000 (16:24 +0100)
committerTomas Mraz <tomas@openssl.org>
Fri, 17 Dec 2021 16:33:49 +0000 (17:33 +0100)
Avoid freeing a provider that was not up-ref-ed before.

Fixes #17292

Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/17295)

crypto/provider_core.c

index 1d5787a6482ad879640938e5579530c3ff615795..e04734c12e3c90ea56404d81f6762672b2fa748a 100644 (file)
@@ -602,6 +602,9 @@ int ossl_provider_add_to_store(OSSL_PROVIDER *prov, OSSL_PROVIDER **actualprov,
     OSSL_PROVIDER tmpl = { 0, };
     OSSL_PROVIDER *actualtmp = NULL;
 
+    if (actualprov != NULL)
+        *actualprov = NULL;
+
     if ((store = get_provider_store(prov->libctx)) == NULL)
         return 0;
 
@@ -658,7 +661,7 @@ int ossl_provider_add_to_store(OSSL_PROVIDER *prov, OSSL_PROVIDER **actualprov,
  err:
     CRYPTO_THREAD_unlock(store->lock);
     if (actualprov != NULL)
-        ossl_provider_free(actualtmp);
+        ossl_provider_free(*actualprov);
     return 0;
 }