From c9732f095363251131e6e6a4cbbe45deea285ed0 Mon Sep 17 00:00:00 2001 From: Matt Caswell Date: Thu, 20 May 2021 11:52:56 +0100 Subject: Fix a memleak in the FIPS provider If the DRBG is used within the scope of the FIPS OSSL_provider_init function then it attempts to register a thread callback via c_thread_start. However the implementation of c_thread_start assumed that the provider's provctx was already present. However because OSSL_provider_init is still running it was actually NULL. This means the thread callback fail to work correctly and a memory leak resulted. Instead of having c_thread_start use the provctx as the callback argument we change the definition of c_thread_start to have an explicit callback argument to use. Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/15278) --- include/crypto/cryptlib.h | 2 +- include/openssl/core_dispatch.h | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'include') diff --git a/include/crypto/cryptlib.h b/include/crypto/cryptlib.h index 1e58663b4f..39a956bfd3 100644 --- a/include/crypto/cryptlib.h +++ b/include/crypto/cryptlib.h @@ -21,7 +21,7 @@ int ossl_init_thread_start(const void *index, void *arg, int ossl_init_thread_deregister(void *index); int ossl_init_thread(void); void ossl_cleanup_thread(void); -void ossl_ctx_thread_stop(void *arg); +void ossl_ctx_thread_stop(OSSL_LIB_CTX *ctx); /* * OPENSSL_INIT flags. The primary list of these is in crypto.h. Flags below diff --git a/include/openssl/core_dispatch.h b/include/openssl/core_dispatch.h index 458cbb1c9e..2a46c10123 100644 --- a/include/openssl/core_dispatch.h +++ b/include/openssl/core_dispatch.h @@ -68,7 +68,8 @@ OSSL_CORE_MAKE_FUNC(int,core_get_params,(const OSSL_CORE_HANDLE *prov, OSSL_PARAM params[])) # define OSSL_FUNC_CORE_THREAD_START 3 OSSL_CORE_MAKE_FUNC(int,core_thread_start,(const OSSL_CORE_HANDLE *prov, - OSSL_thread_stop_handler_fn handfn)) + OSSL_thread_stop_handler_fn handfn, + void *arg)) # define OSSL_FUNC_CORE_GET_LIBCTX 4 OSSL_CORE_MAKE_FUNC(OPENSSL_CORE_CTX *,core_get_libctx, (const OSSL_CORE_HANDLE *prov)) -- cgit v1.2.3