From fb95f1ff71eb1285a244a8269cfb0e03fcf256d8 Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Tue, 19 Jul 2022 19:42:24 +0900 Subject: [PATCH] Fixed ASSERT when context has already been removed --- src/amf/amf-sm.c | 17 ++++++++++++++++- src/ausf/ausf-sm.c | 6 ++++-- src/pcf/pcf-sm.c | 26 +++++++++++++++++++++++--- src/udm/udm-sm.c | 5 ++++- 4 files changed, 47 insertions(+), 7 deletions(-) diff --git a/src/amf/amf-sm.c b/src/amf/amf-sm.c index 2ff02482d..8a6e4fd58 100644 --- a/src/amf/amf-sm.c +++ b/src/amf/amf-sm.c @@ -497,7 +497,10 @@ void amf_state_operational(ogs_fsm_t *s, amf_event_t *e) ogs_sbi_xact_remove(sbi_xact); sess = amf_sess_cycle(sess); - ogs_assert(sess); + if (!sess) { + ogs_error("Session has already been removed"); + break; + } amf_ue = sess->amf_ue; ogs_assert(amf_ue); @@ -574,6 +577,12 @@ void amf_state_operational(ogs_fsm_t *s, amf_event_t *e) case OGS_SBI_OBJ_UE_TYPE: amf_ue = (amf_ue_t *)sbi_object; ogs_assert(amf_ue); + amf_ue = amf_ue_cycle(amf_ue); + if (!amf_ue) { + ogs_error("UE(amf_ue) Context has already been removed"); + break; + } + ogs_error("[%s] Cannot receive SBI message", amf_ue->suci); ogs_assert(OGS_OK == nas_5gs_send_gmm_reject_from_sbi(amf_ue, @@ -583,6 +592,12 @@ void amf_state_operational(ogs_fsm_t *s, amf_event_t *e) case OGS_SBI_OBJ_SESS_TYPE: sess = (amf_sess_t *)sbi_object; ogs_assert(sess); + sess = amf_sess_cycle(sess); + if (!sess) { + ogs_error("Session has already been removed"); + break; + } + ogs_error("[%d:%d] Cannot receive SBI message", sess->psi, sess->pti); if (sess->payload_container_type) { diff --git a/src/ausf/ausf-sm.c b/src/ausf/ausf-sm.c index b6ea582ca..54330f344 100644 --- a/src/ausf/ausf-sm.c +++ b/src/ausf/ausf-sm.c @@ -287,8 +287,10 @@ void ausf_state_operational(ogs_fsm_t *s, ausf_event_t *e) ogs_sbi_xact_remove(sbi_xact); ausf_ue = ausf_ue_cycle(ausf_ue); - ogs_assert(ausf_ue); - ogs_assert(OGS_FSM_STATE(&ausf_ue->sm)); + if (!ausf_ue) { + ogs_error("UE(ausf-ue) Context has already been removed"); + break; + } e->ausf_ue = ausf_ue; e->sbi.message = &message; diff --git a/src/pcf/pcf-sm.c b/src/pcf/pcf-sm.c index 30b66d0e4..9301f351c 100644 --- a/src/pcf/pcf-sm.c +++ b/src/pcf/pcf-sm.c @@ -403,7 +403,11 @@ void pcf_state_operational(ogs_fsm_t *s, pcf_event_t *e) ogs_sbi_xact_remove(sbi_xact); pcf_ue = pcf_ue_cycle(pcf_ue); - ogs_assert(pcf_ue); + if (!pcf_ue) { + ogs_error("UE(pcf_ue) Context " + "has already been removed"); + break; + } e->pcf_ue = pcf_ue; e->sbi.message = &message; @@ -427,7 +431,10 @@ void pcf_state_operational(ogs_fsm_t *s, pcf_event_t *e) ogs_sbi_xact_remove(sbi_xact); sess = pcf_sess_cycle(sess); - ogs_assert(sess); + if (!sess) { + ogs_error("Session has already been removed"); + break; + } pcf_ue = sess->pcf_ue; ogs_assert(pcf_ue); @@ -475,7 +482,10 @@ void pcf_state_operational(ogs_fsm_t *s, pcf_event_t *e) ogs_sbi_xact_remove(sbi_xact); sess = pcf_sess_cycle(sess); - ogs_assert(sess); + if (!sess) { + ogs_error("Session has already been removed"); + break; + } pcf_ue = sess->pcf_ue; ogs_assert(pcf_ue); @@ -568,12 +578,22 @@ void pcf_state_operational(ogs_fsm_t *s, pcf_event_t *e) case OGS_SBI_OBJ_UE_TYPE: pcf_ue = (pcf_ue_t *)sbi_object; ogs_assert(pcf_ue); + pcf_ue = pcf_ue_cycle(pcf_ue); + if (!pcf_ue) { + ogs_error("UE(pcf_ue) has already been removed"); + break; + } ogs_error("[%s] Cannot receive SBI message", pcf_ue->supi); break; case OGS_SBI_OBJ_SESS_TYPE: sess = (pcf_sess_t *)sbi_object; ogs_assert(sess); + sess = pcf_sess_cycle(sess); + if (!sess) { + ogs_error("Session has already been removed"); + break; + } ogs_error("[%d] Cannot receive SBI message", sess->psi); break; diff --git a/src/udm/udm-sm.c b/src/udm/udm-sm.c index 4f6fd5327..9e28bef3b 100644 --- a/src/udm/udm-sm.c +++ b/src/udm/udm-sm.c @@ -321,7 +321,10 @@ void udm_state_operational(ogs_fsm_t *s, udm_event_t *e) ogs_sbi_xact_remove(sbi_xact); udm_ue = udm_ue_cycle(udm_ue); - ogs_assert(udm_ue); + if (!udm_ue) { + ogs_error("UE(udm_ue) Context has already been removed"); + break; + } e->udm_ue = udm_ue; e->sbi.message = &message;