From: Matt Caswell Date: Mon, 21 Jun 2021 14:37:48 +0000 (+0100) Subject: Don't skip the current provider in ossl_provider_register_child_cb X-Git-Tag: openssl-3.0.0-beta2~207 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=549b5cb4edbc8d537ae73b6f5614efdd98ed79f4;p=thirdparty%2Fopenssl.git Don't skip the current provider in ossl_provider_register_child_cb This restriction was in place to avoid problems with recursive attempts to aquire the flag lock/store lock from within a provider's init function. Since those locks are no longer held when calling the init function there is no reason for the restriction any more. Reviewed-by: Paul Dale Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/15854) --- diff --git a/crypto/provider_core.c b/crypto/provider_core.c index 18acf628645..8b99b3c1cbc 100644 --- a/crypto/provider_core.c +++ b/crypto/provider_core.c @@ -1550,13 +1550,7 @@ static int ossl_provider_register_child_cb(const OSSL_CORE_HANDLE *handle, max = sk_OSSL_PROVIDER_num(store->providers); for (i = 0; i < max; i++) { prov = sk_OSSL_PROVIDER_value(store->providers, i); - /* - * We require register_child_cb to be called during a provider init - * function. The currently initing provider will never be activated yet - * and we we should not attempt to aquire the flag_lock for it. - */ - if (prov == thisprov) - continue; + if (!CRYPTO_THREAD_read_lock(prov->flag_lock)) break; /*