From 36840ab577d547a35cbc7c72396dc7931712eb6e Mon Sep 17 00:00:00 2001 From: Zhihao Yuan Date: Mon, 26 Aug 2024 18:48:36 -0700 Subject: [PATCH] Recycle the TLS key that holds thread_event_handler Fixes #25278 Reviewed-by: Neil Horman Reviewed-by: Tomas Mraz (Merged from https://github.com/openssl/openssl/pull/25300) --- crypto/initthread.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/crypto/initthread.c b/crypto/initthread.c index e4d830d7fc..27b460009e 100644 --- a/crypto/initthread.c +++ b/crypto/initthread.c @@ -266,9 +266,8 @@ void *ossl_thread_event_ctx_new(OSSL_LIB_CTX *libctx) if (tlocal == NULL) return NULL; - if (!CRYPTO_THREAD_init_local(tlocal, NULL)) { - goto err; - } + if (!CRYPTO_THREAD_init_local(tlocal, NULL)) + goto deinit; hands = OPENSSL_zalloc(sizeof(*hands)); if (hands == NULL) @@ -290,12 +289,15 @@ void *ossl_thread_event_ctx_new(OSSL_LIB_CTX *libctx) return tlocal; err: OPENSSL_free(hands); + CRYPTO_THREAD_cleanup_local(tlocal); + deinit: OPENSSL_free(tlocal); return NULL; } void ossl_thread_event_ctx_free(void *tlocal) { + CRYPTO_THREAD_cleanup_local(tlocal); OPENSSL_free(tlocal); }