From: Zhihao Yuan Date: Tue, 27 Aug 2024 01:48:36 +0000 (-0700) Subject: Recycle the TLS key that holds thread_event_handler X-Git-Tag: openssl-3.1.8~145 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0810f5570d6808d45254d830aca35c38387d51df;p=thirdparty%2Fopenssl.git 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) --- diff --git a/crypto/initthread.c b/crypto/initthread.c index ae234cd205e..cd59185fa43 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); }