diff --git a/crypto/provider_child.c b/crypto/provider_child.c index 0ca61c0686..2487d43fd7 100644 --- a/crypto/provider_child.c +++ b/crypto/provider_child.c @@ -198,44 +198,6 @@ static int provider_remove_child_cb(const OSSL_CORE_HANDLE *prov, void *cbdata) return 1; } -int ossl_provider_init_child_providers(OSSL_LIB_CTX *ctx) -{ - struct child_prov_globals *gbl; - - /* Should never happen */ - if (ctx == NULL) - return 0; - - gbl = ossl_lib_ctx_get_data(ctx, OSSL_LIB_CTX_CHILD_PROVIDER_INDEX, - &child_prov_ossl_ctx_method); - if (gbl == NULL) - return 0; - - if (!CRYPTO_THREAD_read_lock(gbl->lock)) - return 0; - if (gbl->isinited) { - CRYPTO_THREAD_unlock(gbl->lock); - return 1; - } - CRYPTO_THREAD_unlock(gbl->lock); - - if (!CRYPTO_THREAD_write_lock(gbl->lock)) - return 0; - if (!gbl->isinited) { - if (!gbl->c_provider_register_child_cb(gbl->handle, - provider_create_child_cb, - provider_remove_child_cb, - ctx)) { - CRYPTO_THREAD_unlock(gbl->lock); - return 0; - } - gbl->isinited = 1; - } - CRYPTO_THREAD_unlock(gbl->lock); - - return 1; -} - int ossl_provider_init_as_child(OSSL_LIB_CTX *ctx, const OSSL_CORE_HANDLE *handle, const OSSL_DISPATCH *in) @@ -300,6 +262,14 @@ int ossl_provider_init_as_child(OSSL_LIB_CTX *ctx, if (gbl->lock == NULL) return 0; + if (!gbl->c_provider_register_child_cb(gbl->handle, + provider_create_child_cb, + provider_remove_child_cb, + ctx)) + return 0; + + gbl->isinited = 1; + return 1; } diff --git a/crypto/provider_core.c b/crypto/provider_core.c index f0b429d986..b384f74fd2 100644 --- a/crypto/provider_core.c +++ b/crypto/provider_core.c @@ -276,9 +276,6 @@ OSSL_PROVIDER *ossl_provider_find(OSSL_LIB_CTX *libctx, const char *name, if (!noconfig) { if (ossl_lib_ctx_is_default(libctx)) OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL); - if (ossl_lib_ctx_is_child(libctx) - && !ossl_provider_init_child_providers(libctx)) - return NULL; } #endif @@ -1007,9 +1004,6 @@ int ossl_provider_doall_activated(OSSL_LIB_CTX *ctx, */ if (ossl_lib_ctx_is_default(ctx)) OPENSSL_init_crypto(OPENSSL_INIT_LOAD_CONFIG, NULL); - if (ossl_lib_ctx_is_child(ctx) - && !ossl_provider_init_child_providers(ctx)) - return 0; #endif if (store == NULL) diff --git a/doc/internal/man3/ossl_provider_new.pod b/doc/internal/man3/ossl_provider_new.pod index ff347bad3f..7ab60eb3a5 100644 --- a/doc/internal/man3/ossl_provider_new.pod +++ b/doc/internal/man3/ossl_provider_new.pod @@ -7,7 +7,7 @@ ossl_provider_free, ossl_provider_set_fallback, ossl_provider_set_module_path, ossl_provider_add_parameter, ossl_provider_set_child, ossl_provider_get_parent, ossl_provider_up_ref_parent, ossl_provider_free_parent, -ossl_provider_get0_dispatch, ossl_provider_init_child_providers, +ossl_provider_get0_dispatch, ossl_provider_init_as_child, ossl_provider_activate, ossl_provider_deactivate, ossl_provider_available, ossl_provider_ctx, @@ -95,7 +95,6 @@ ossl_provider_get_capabilities int *result); int ossl_provider_clear_all_operation_bits(OSSL_LIB_CTX *libctx); - int ossl_provider_init_child_providers(OSSL_LIB_CTX *ctx); int ossl_provider_init_as_child(OSSL_LIB_CTX *ctx, const OSSL_CORE_HANDLE *handle, const OSSL_DISPATCH *in); @@ -291,10 +290,6 @@ I<*result> to 1 or 0 accorddingly. ossl_provider_clear_all_operation_bits() clears all of the operation bits to (0) for all providers in the library context I. -ossl_provider_init_child_providers() registers the callbacks required to -receive notifications about loading and unloading of providers in the parent -library context. - ossl_provider_init_as_child() stores in the library context I references to the necessary upcalls for managing child providers. The I and I parameters are the B and B pointers that were diff --git a/include/internal/provider.h b/include/internal/provider.h index 5b0af7a335..020cbc8a9e 100644 --- a/include/internal/provider.h +++ b/include/internal/provider.h @@ -108,7 +108,6 @@ int ossl_provider_clear_all_operation_bits(OSSL_LIB_CTX *libctx); void ossl_provider_add_conf_module(void); /* Child providers */ -int ossl_provider_init_child_providers(OSSL_LIB_CTX *ctx); int ossl_provider_init_as_child(OSSL_LIB_CTX *ctx, const OSSL_CORE_HANDLE *handle, const OSSL_DISPATCH *in);