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-15 14:22:41 +0000
commit5ab06d33e6b3be15c8784f1e1fd6c3d845b5cc3a (patch)
tree8cb9e572c0d860c73f7c559b394a45d4d632c8f9 /crypto/provider.c
parentfc205cedd7b9f12a70117c5f9167ba689ec35a28 (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: Paul Dale <pauli@openssl.org> Reviewed-by: Tomas Mraz <tomas@openssl.org> (Merged from https://github.com/openssl/openssl/pull/17018)
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;
}