return NULL;
prov->libctx = libctx;
- prov->store = store;
#ifndef FIPS_MODULE
prov->error_lib = ERR_get_next_error_library();
#endif
ossl_provider_free(prov);
ret = 0;
}
+ prov->store = store;
if (!retain_fallbacks)
store->use_fallbacks = 0;
CRYPTO_THREAD_unlock(store->lock);
if (prov == NULL)
goto err;
prov->libctx = store->libctx;
- prov->store = store;
#ifndef FIPS_MODULE
prov->error_lib = ERR_get_next_error_library();
#endif
* we try to avoid calling a user callback while holding a lock.
* However, fallbacks are never third party providers so we accept this.
*/
- if (provider_activate(prov, 0, 0) < 0
- || sk_OSSL_PROVIDER_push(store->providers, prov) == 0) {
+ if (provider_activate(prov, 0, 0) < 0) {
+ ossl_provider_free(prov);
+ goto err;
+ }
+ prov->store = store;
+ if (sk_OSSL_PROVIDER_push(store->providers, prov) == 0) {
ossl_provider_free(prov);
goto err;
}