From 6f4ee013d29b3860407892626ead414aaf8e54a3 Mon Sep 17 00:00:00 2001
From: Wu Jing <wu.jing@cn.fujitsu.com>
Date: Mon, 7 May 2018 18:15:42 +0900
Subject: [PATCH] fix RM912 SegmentFault in dlsch_coding while using a UE which
 has been removed

---
 nfapi/oai_integration/nfapi_pnf.c         | 4 ++++
 openair1/PHY/LTE_TRANSPORT/dlsch_coding.c | 8 ++++++++
 2 files changed, 12 insertions(+)

diff --git a/nfapi/oai_integration/nfapi_pnf.c b/nfapi/oai_integration/nfapi_pnf.c
index 628acf2e77..9d75407cb9 100644
--- a/nfapi/oai_integration/nfapi_pnf.c
+++ b/nfapi/oai_integration/nfapi_pnf.c
@@ -840,6 +840,10 @@ int pnf_phy_dl_config_req(nfapi_pnf_p7_config_t* pnf_p7, nfapi_dl_config_request
         LTE_eNB_DLSCH_t *dlsch0 = eNB->dlsch[UE_id][0];
         //LTE_eNB_DLSCH_t *dlsch1 = eNB->dlsch[UE_id][1];
         int harq_pid = dlsch0->harq_ids[sfn%2][sf];
+        if(harq_pid >= dlsch0->Mdlharq) {
+          LOG_E(PHY,"pnf_phy_dl_config_req illegal harq_pid %d\n", harq_pid);
+          return(-1);
+        }
         uint8_t *dlsch_sdu = tx_pdus[UE_id][harq_pid];
         
         memcpy(dlsch_sdu, tx_pdu->segments[0].segment_data, tx_pdu->segments[0].segment_length);
diff --git a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
index 69e7d7424a..80ab4a401c 100644
--- a/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
+++ b/openair1/PHY/LTE_TRANSPORT/dlsch_coding.c
@@ -400,6 +400,10 @@ int dlsch_encoding_2threads(PHY_VARS_eNB *eNB,
   unsigned short iind;
 
   unsigned char harq_pid = dlsch->harq_ids[frame%2][subframe];
+  if(harq_pid >= dlsch->Mdlharq) {
+    LOG_E(PHY,"dlsch_encoding_2threads illegal harq_pid %d\n", harq_pid);
+    return(-1);
+  }
   unsigned short nb_rb = dlsch->harq_processes[harq_pid]->nb_rb;
   unsigned int A;
   unsigned char mod_order;
@@ -584,6 +588,10 @@ int dlsch_encoding(PHY_VARS_eNB *eNB,
 
   LTE_DL_FRAME_PARMS *frame_parms = &eNB->frame_parms;
   unsigned char harq_pid = dlsch->harq_ids[frame%2][subframe];
+  if(harq_pid >= dlsch->Mdlharq) {
+    LOG_E(PHY,"dlsch_encoding illegal harq_pid %d\n", harq_pid);
+    return(-1);
+  }
   unsigned short nb_rb = dlsch->harq_processes[harq_pid]->nb_rb;
   unsigned int A;
   unsigned char mod_order;
-- 
2.26.2