From 19d83ad21e0f2b8bfee26eea74bcd8bcb0082f8d Mon Sep 17 00:00:00 2001
From: Robert Schmidt <robert.schmidt@openairinterface.org>
Date: Fri, 1 Jul 2022 18:12:53 +0200
Subject: [PATCH] Make GTPV1U REQ in one allocation to avoid mem leak at GTP

---
 openair2/SDAP/nr_sdap/nr_sdap_entity.c | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/openair2/SDAP/nr_sdap/nr_sdap_entity.c b/openair2/SDAP/nr_sdap/nr_sdap_entity.c
index 5e3627296c5..c1fcdced796 100644
--- a/openair2/SDAP/nr_sdap/nr_sdap_entity.c
+++ b/openair2/SDAP/nr_sdap/nr_sdap_entity.c
@@ -197,18 +197,20 @@ static void nr_sdap_rx_entity(nr_sdap_entity_t *entity,
     }
 
     // Pushing SDAP SDU to GTP-U Layer
-    MessageDef *message_p;
-    uint8_t *gtpu_buffer_p;
-    gtpu_buffer_p = itti_malloc(TASK_PDCP_ENB, TASK_GTPV1_U, size + GTPU_HEADER_OVERHEAD_MAX - offset);
-    AssertFatal(gtpu_buffer_p != NULL, "OUT OF MEMORY");
-    memcpy(&gtpu_buffer_p[GTPU_HEADER_OVERHEAD_MAX], buf+offset, size-offset);
-    message_p = itti_alloc_new_message(TASK_PDCP_ENB, 0 , GTPV1U_GNB_TUNNEL_DATA_REQ);
+    MessageDef *message_p = itti_alloc_new_message_sized(TASK_PDCP_ENB,
+                                                         0,
+                                                         GTPV1U_GNB_TUNNEL_DATA_REQ,
+                                                         sizeof(gtpv1u_gnb_tunnel_data_req_t)
+                                                           + size + GTPU_HEADER_OVERHEAD_MAX - offset);
     AssertFatal(message_p != NULL, "OUT OF MEMORY");
-    GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).buffer = gtpu_buffer_p;
-    GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).length              = size-offset;
-    GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).offset              = GTPU_HEADER_OVERHEAD_MAX;
-    GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).rnti                = rnti;
-    GTPV1U_GNB_TUNNEL_DATA_REQ(message_p).pdusession_id       = pdusession_id;
+    gtpv1u_gnb_tunnel_data_req_t *req = &GTPV1U_GNB_TUNNEL_DATA_REQ(message_p);
+    uint8_t *gtpu_buffer_p = (uint8_t *) (req + 1);
+    memcpy(gtpu_buffer_p + GTPU_HEADER_OVERHEAD_MAX, buf + offset, size - offset);
+    req->buffer        = gtpu_buffer_p;
+    req->length        = size - offset;
+    req->offset        = GTPU_HEADER_OVERHEAD_MAX;
+    req->rnti          = rnti;
+    req->pdusession_id = pdusession_id;
     LOG_D(SDAP, "%s()  sending message to gtp size %d\n", __func__,  size-offset);
     itti_send_msg_to_task(TASK_GTPV1_U, INSTANCE_DEFAULT, message_p);
   } else { //nrUE
-- 
GitLab