From e65b97f530811e273cd44284261694f8c3d60bc6 Mon Sep 17 00:00:00 2001 From: Tomas Mraz Date: Thu, 11 Apr 2024 10:05:04 +0200 Subject: [PATCH] tls_provider_init(): Fix leaks in error cases Fixes #24101 Reviewed-by: Tom Cosgrove Reviewed-by: Paul Dale (Merged from https://github.com/openssl/openssl/pull/24103) (cherry picked from commit 2a5d733e64f009f758163da852f1e7fee6aea0a2) --- test/tls-provider.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/test/tls-provider.c b/test/tls-provider.c index c5b2306729b..18c5960a4ce 100644 --- a/test/tls-provider.c +++ b/test/tls-provider.c @@ -3223,7 +3223,7 @@ int tls_provider_init(const OSSL_CORE_HANDLE *handle, PROV_XOR_CTX *prov_ctx = xor_newprovctx(libctx); if (libctx == NULL || prov_ctx == NULL) - return 0; + goto err; *provctx = prov_ctx; @@ -3258,23 +3258,29 @@ int tls_provider_init(const OSSL_CORE_HANDLE *handle, */ if (!c_obj_create(handle, XORSIGALG_OID, XORSIGALG_NAME, XORSIGALG_NAME)) { ERR_raise(ERR_LIB_USER, XORPROV_R_OBJ_CREATE_ERR); - return 0; + goto err; } if (!c_obj_add_sigid(handle, XORSIGALG_OID, "", XORSIGALG_OID)) { ERR_raise(ERR_LIB_USER, XORPROV_R_OBJ_CREATE_ERR); - return 0; + goto err; } if (!c_obj_create(handle, XORSIGALG_HASH_OID, XORSIGALG_HASH_NAME, NULL)) { ERR_raise(ERR_LIB_USER, XORPROV_R_OBJ_CREATE_ERR); - return 0; + goto err; } if (!c_obj_add_sigid(handle, XORSIGALG_HASH_OID, XORSIGALG_HASH, XORSIGALG_HASH_OID)) { ERR_raise(ERR_LIB_USER, XORPROV_R_OBJ_CREATE_ERR); - return 0; + goto err; } *out = tls_prov_dispatch_table; return 1; + +err: + OPENSSL_free(prov_ctx); + *provctx = NULL; + OSSL_LIB_CTX_free(libctx); + return 0; } -- 2.47.2