From 549b5cb4edbc8d537ae73b6f5614efdd98ed79f4 Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Mon, 21 Jun 2021 15:37:48 +0100 Subject: [PATCH] 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) --- crypto/provider_core.c | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) 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; /* -- 2.47.2