From 9af00e029a3f813b296600b45e17bab4bdea08ca 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) (cherry picked from commit 36840ab577d547a35cbc7c72396dc7931712eb6e) --- crypto/initthread.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/crypto/initthread.c b/crypto/initthread.c index e4d830d7fc5..27b460009e1 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); } -- 2.47.2