summaryrefslogtreecommitdiffstats
path: root/crypto/provider.c
diff options
context:
space:
mode:
authorMatt Caswell <matt@openssl.org>2021-11-09 14:20:31 +0000
committerMatt Caswell <matt@openssl.org>2021-11-12 17:16:14 +0000
commit1e8ed3e596162d7490b26fb12e58af5208f52402 (patch)
tree5fee239a6254e94dbb1a9442fbf4ff7d6da9e0fc /crypto/provider.c
parentcad22202a32a94059e351d9819e6c9ed5c66605a (diff)
Correctly activate the provider in OSSL_PROVIDER_try_load
If during OSSL_PROVIDER_try_load() we attempt to load a provider, but adding to the store gives back a different provider, then we need to ensure this different provider has its activation count increased. Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/16980)
Diffstat (limited to 'crypto/provider.c')
-rw-r--r--crypto/provider.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/crypto/provider.c b/crypto/provider.c
index 974c636bc1..114b426929 100644
--- a/crypto/provider.c
+++ b/crypto/provider.c
@@ -39,6 +39,12 @@ OSSL_PROVIDER *OSSL_PROVIDER_try_load(OSSL_LIB_CTX *libctx, const char *name,
ossl_provider_free(prov);
return NULL;
}
+ if (actual != prov) {
+ if (!ossl_provider_activate(actual, 1, 0)) {
+ ossl_provider_free(actual);
+ return NULL;
+ }
+ }
return actual;
}