From 07f9c81d20f2c972dd454e2343634586d3aa88a1 Mon Sep 17 00:00:00 2001 From: Pauli Date: Thu, 27 Apr 2023 10:57:12 +1000 Subject: [PATCH] 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) --- crypto/provider_core.c | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) 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); -- 2.47.2