summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomas Mraz <tomas@openssl.org>2024-04-11 10:05:04 +0200
committerTomas Mraz <tomas@openssl.org>2024-05-10 13:55:32 +0200
commit8f683d6cb18aed51c9416aff65e9a47eb5eadc63 (patch)
tree6db724315d1753f22116a18cb4f4e1afbbb5e34a
parent9346f82b9e1ae7c3f12af3914eeac78e1804126c (diff)
tls_provider_init(): Fix leaks in error cases
Fixes #24101 Reviewed-by: Tom Cosgrove <tom.cosgrove@arm.com> Reviewed-by: Paul Dale <ppzgs1@gmail.com> (Merged from https://github.com/openssl/openssl/pull/24103) (cherry picked from commit 2a5d733e64f009f758163da852f1e7fee6aea0a2)
-rw-r--r--test/tls-provider.c16
1 files changed, 11 insertions, 5 deletions
diff --git a/test/tls-provider.c b/test/tls-provider.c
index 6d66fdf8e1..4fe48aab5e 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;
}