From 051bfeb6bcd6caab2284eabcabb5316d082fc690 Mon Sep 17 00:00:00 2001 From: Ingo Franzki Date: Tue, 4 Aug 2026 14:45:57 +0200 Subject: [PATCH] ICA: Add NULL check after allocation in token_specific_init() Check if allocating the ica_data worked. Fail early if not. Also fix a bypass of the cleanup in case of error, and also cleanup libica, if it was already loaded. Signed-off-by: Ingo Franzki --- usr/lib/ica_s390_stdll/ica_specific.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/usr/lib/ica_s390_stdll/ica_specific.c b/usr/lib/ica_s390_stdll/ica_specific.c index cd875eb9..11ab4f6c 100644 --- a/usr/lib/ica_s390_stdll/ica_specific.c +++ b/usr/lib/ica_s390_stdll/ica_specific.c @@ -629,6 +629,11 @@ CK_RV token_specific_init(STDLL_TokData_t *tokdata, CK_SLOT_ID SlotNumber, UNUSED(conf_name); ica_data = (ica_private_data_t *)calloc(1, sizeof(ica_private_data_t)); + if (ica_data == NULL) { + TRACE_ERROR("%s\n", ock_err(ERR_HOST_MEMORY)); + return CKR_HOST_MEMORY; + } + tokdata->private_data = ica_data; rc = load_libica(ica_data); @@ -657,7 +662,7 @@ CK_RV token_specific_init(STDLL_TokData_t *tokdata, CK_SLOT_ID SlotNumber, &(tokdata->mech_list_len)); if (rc != CKR_OK) { TRACE_ERROR("Mechanism filtering failed! rc = 0x%lx\n", rc); - return rc; + goto out; } TRACE_INFO("ica %s slot=%lu running\n", __func__, SlotNumber); @@ -670,6 +675,10 @@ CK_RV token_specific_init(STDLL_TokData_t *tokdata, CK_SLOT_ID SlotNumber, out: if (rc != CKR_OK) { + if (p_ica_cleanup != NULL) + p_ica_cleanup(); + if (ica_data->libica_dso != NULL) + dlclose(ica_data->libica_dso); free(ica_data); tokdata->private_data = NULL; }