From: Pauli Date: Thu, 27 Apr 2023 00:57:12 +0000 (+1000) Subject: provider_core: sort provider stack on find X-Git-Tag: openssl-3.2.0-alpha1~942 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=07f9c81d20f2c972dd454e2343634586d3aa88a1;p=thirdparty%2Fopenssl.git provider_core: sort provider stack on find Adding all providers is quadratic time because each provider is checked for being in the stack before adding it. However, this is an improvement over the older O(n^2 log n) code where each find also sorted the stack. Reviewed-by: Tomas Mraz Reviewed-by: Todd Short (Merged from https://github.com/openssl/openssl/pull/20842) --- diff --git a/crypto/provider_core.c b/crypto/provider_core.c index 246667ecb21..60a1efedfbe 100644 --- a/crypto/provider_core.c +++ b/crypto/provider_core.c @@ -417,12 +417,9 @@ OSSL_PROVIDER *ossl_provider_find(OSSL_LIB_CTX *libctx, const char *name, #endif tmpl.name = (char *)name; - /* - * A "find" operation can sort the stack, and therefore a write lock is - * required. - */ if (!CRYPTO_THREAD_write_lock(store->lock)) return NULL; + sk_OSSL_PROVIDER_sort(store->providers); if ((i = sk_OSSL_PROVIDER_find(store->providers, &tmpl)) != -1) prov = sk_OSSL_PROVIDER_value(store->providers, i); CRYPTO_THREAD_unlock(store->lock);