[MME] fix the crash issue if enb_ue is NULL(#1275)

An assert occurs when a NAS message retransmission occurs.

Because there is no `enb_ue` context.

Therefore, before removing enb_ue, all Timers must be stopped
to prevent retransmission of NAS messages.
This commit is contained in:
Sukchan Lee 2021-12-04 10:53:49 +09:00
parent 6ae9ecc697
commit aab8286401
3 changed files with 27 additions and 0 deletions

View File

@ -1400,6 +1400,15 @@ void ngap_handle_ue_context_release_action(ran_ue_t *ran_ue)
ran_ue->ran_ue_ngap_id, (long long)ran_ue->amf_ue_ngap_id);
if (amf_ue) {
ogs_info(" SUCI[%s]", amf_ue->suci ? amf_ue->suci : "Unknown");
/*
* An assert occurs when a NAS message retransmission occurs.
*
* Because there is no `ran_ue` context.
*
* Therefore, before removing `ran_ue`, all Timers must be stopped
* to prevent retransmission of NAS messages.
*/
CLEAR_AMF_UE_ALL_TIMERS(amf_ue);
}

View File

@ -422,11 +422,20 @@ struct mme_ue_s {
#define CLEAR_MME_UE_ALL_TIMERS(__mME) \
do { \
mme_sess_t *sess = NULL; \
mme_bearer_t *bearer = NULL; \
\
CLEAR_MME_UE_TIMER((__mME)->t3413); \
CLEAR_MME_UE_TIMER((__mME)->t3422); \
CLEAR_MME_UE_TIMER((__mME)->t3450); \
CLEAR_MME_UE_TIMER((__mME)->t3460); \
CLEAR_MME_UE_TIMER((__mME)->t3470); \
\
ogs_list_for_each(&mme_ue->sess_list, sess) { \
ogs_list_for_each(&sess->bearer_list, bearer) { \
CLEAR_BEARER_ALL_TIMERS(bearer); \
} \
} \
} while(0);
#define CLEAR_MME_UE_TIMER(__mME_UE_TIMER) \
do { \

View File

@ -1385,6 +1385,15 @@ void s1ap_handle_ue_context_release_action(enb_ue_t *enb_ue)
enb_ue->enb_ue_s1ap_id, enb_ue->mme_ue_s1ap_id);
if (mme_ue) {
ogs_info(" IMSI[%s]", mme_ue->imsi_bcd);
/*
* An assert occurs when a NAS message retransmission occurs.
*
* Because there is no `enb_ue` context.
*
* Therefore, before removing enb_ue, all Timers must be stopped
* to prevent retransmission of NAS messages.
*/
CLEAR_MME_UE_ALL_TIMERS(mme_ue);
}