From a516a632d4853040f955a6ad6f954c639c22a69f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?R=C3=BAben=20Soares=20da=20Silva?= Date: Fri, 17 May 2024 13:58:21 +0100 Subject: [PATCH] Fix memory leak related to RX_DATA.indication message --- nfapi/oai_integration/aerial/fapi_nvIPC.c | 4 ++++ nfapi/oai_integration/aerial/fapi_vnf_p7.c | 6 +++--- openair2/NR_PHY_INTERFACE/NR_IF_Module.c | 3 +++ 3 files changed, 10 insertions(+), 3 deletions(-) diff --git a/nfapi/oai_integration/aerial/fapi_nvIPC.c b/nfapi/oai_integration/aerial/fapi_nvIPC.c index dea1b4edb0..062bb911fc 100644 --- a/nfapi/oai_integration/aerial/fapi_nvIPC.c +++ b/nfapi/oai_integration/aerial/fapi_nvIPC.c @@ -222,6 +222,10 @@ static int ipc_handle_rx_msg(nv_ipc_t *ipc, nv_ipc_msg_t *msg) NFAPI_TRACE(NFAPI_TRACE_INFO, "%s: Handling RX Indication\n", __FUNCTION__); if (((vnf_info *)vnf_config->user_data)->p7_vnfs->config->nr_rx_data_indication) { (((vnf_info *)vnf_config->user_data)->p7_vnfs->config->nr_rx_data_indication)(&ind); + for (int i = 0; i < ind.number_of_pdus; ++i) { + free(ind.pdu_list[i].pdu); + } + free(ind.pdu_list); } break; } diff --git a/nfapi/oai_integration/aerial/fapi_vnf_p7.c b/nfapi/oai_integration/aerial/fapi_vnf_p7.c index 1d85113956..605550740b 100644 --- a/nfapi/oai_integration/aerial/fapi_vnf_p7.c +++ b/nfapi/oai_integration/aerial/fapi_vnf_p7.c @@ -358,7 +358,8 @@ int aerial_phy_nr_rx_data_indication(nfapi_nr_rx_data_indication_t *ind) rx_ind->pdu_list[j].ul_cqi = ind->pdu_list[j].ul_cqi; rx_ind->pdu_list[j].timing_advance = ind->pdu_list[j].timing_advance; rx_ind->pdu_list[j].rssi = ind->pdu_list[j].rssi; - rx_ind->pdu_list[j].pdu = ind->pdu_list[j].pdu; + rx_ind->pdu_list[j].pdu = calloc(rx_ind->pdu_list[j].pdu_length, sizeof(uint8_t)); + memcpy(rx_ind->pdu_list[j].pdu,ind->pdu_list[j].pdu,ind->pdu_list[j].pdu_length); LOG_D(NR_MAC, "(%d.%d) Handle %d for index %d, RNTI, %04x, HARQID %d\n", ind->sfn, @@ -920,8 +921,7 @@ static uint8_t aerial_unpack_nr_rx_data_indication_body(nfapi_nr_rx_data_pdu_t * } // Allocate space for the pdu to be unpacked later - uint32_t length = value->pdu_length; - value->pdu = nfapi_p7_allocate(sizeof(*value->pdu) * length, config); + value->pdu = nfapi_p7_allocate(sizeof(*value->pdu) * value->pdu_length, config); return 1; } diff --git a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c index a2d508531c..869c0f9882 100644 --- a/openair2/NR_PHY_INTERFACE/NR_IF_Module.c +++ b/openair2/NR_PHY_INTERFACE/NR_IF_Module.c @@ -267,6 +267,9 @@ static void free_unqueued_nfapi_indications(nfapi_nr_rach_indication_t *rach_ind } if (rx_ind && rx_ind->number_of_pdus > 0) { + for (int i = 0; i < rx_ind->number_of_pdus; ++i) { + free_and_zero(rx_ind->pdu_list[i].pdu); + } free_and_zero(rx_ind->pdu_list); free_and_zero(rx_ind); }