From 7b36af059778a40cbf9cfd41bfc40ead080cb5ab Mon Sep 17 00:00:00 2001
From: Cedric Roux <cedric.roux@eurecom.fr>
Date: Wed, 15 Feb 2017 15:38:37 +0100
Subject: [PATCH] bugfix: variable was on the stack

Guess what happens when we return from the function...
---
 openair3/NAS/UE/nas_ue_task.c | 3 +++
 targets/COMMON/create_tasks.c | 7 ++++---
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/openair3/NAS/UE/nas_ue_task.c b/openair3/NAS/UE/nas_ue_task.c
index 58e38fdbc20..2a42b38a724 100644
--- a/openair3/NAS/UE/nas_ue_task.c
+++ b/openair3/NAS/UE/nas_ue_task.c
@@ -271,6 +271,9 @@ void *nas_ue_task(void *args_p)
       }
     }
   }
+
+  free(users);
+  return NULL;
 }
 
 nas_user_t *find_user_from_fd(nas_user_container_t *users, int fd) {
diff --git a/targets/COMMON/create_tasks.c b/targets/COMMON/create_tasks.c
index d786cde511f..c28b9e839c4 100644
--- a/targets/COMMON/create_tasks.c
+++ b/targets/COMMON/create_tasks.c
@@ -85,9 +85,10 @@ int create_tasks(uint32_t enb_nb, uint32_t ue_nb)
 
 #      if defined(NAS_BUILT_IN_UE)
       if (ue_nb > 0) {
-        nas_user_container_t users;
-        users.count = ue_nb;
-        if (itti_create_task (TASK_NAS_UE, nas_ue_task, &users) < 0) {
+        nas_user_container_t *users = calloc(1, sizeof(*users));
+        if (users == NULL) abort();
+        users->count = ue_nb;
+        if (itti_create_task (TASK_NAS_UE, nas_ue_task, users) < 0) {
           LOG_E(NAS, "Create task for NAS UE failed\n");
           return -1;
         }
-- 
GitLab