[MME] fix the crash with unknown S-NSSAI (#1287)

This commit is contained in:
Sukchan Lee 2021-12-17 21:42:26 +09:00
parent 54b919f65f
commit d87d7c12c2
4 changed files with 15 additions and 24 deletions

View File

@ -43,7 +43,6 @@ int ogs_dbi_session_data(char *supi, ogs_s_nssai_t *s_nssai, char *dnn,
ogs_session_data_t zero_data;
ogs_assert(supi);
ogs_assert(s_nssai);
ogs_assert(dnn);
ogs_assert(session_data);
@ -122,9 +121,10 @@ int ogs_dbi_session_data(char *supi, ogs_s_nssai_t *s_nssai, char *dnn,
continue;
}
if (s_nssai->sst != sst) continue;
if (s_nssai && s_nssai->sst != sst) continue;
if (s_nssai->sd.v != OGS_S_NSSAI_NO_SD_VALUE &&
if (s_nssai &&
s_nssai->sd.v != OGS_S_NSSAI_NO_SD_VALUE &&
sd.v != OGS_S_NSSAI_NO_SD_VALUE) {
if (s_nssai->sd.v != sd.v) continue;
}
@ -150,7 +150,10 @@ int ogs_dbi_session_data(char *supi, ogs_s_nssai_t *s_nssai, char *dnn,
done:
if (found == false) {
ogs_error("Cannot find SUPI[%s] S_NSSAI[SST:%d SD:0x%x] DNN[%s] in DB",
supi_id, s_nssai->sst, s_nssai->sd.v, dnn);
supi_id,
s_nssai ? s_nssai->sst : 0,
s_nssai ? s_nssai->sd.v : 0,
dnn);
rv = OGS_ERROR;
goto out;

View File

@ -277,7 +277,6 @@ static int hss_ogs_diam_s6a_ulr_cb( struct msg **msg, struct avp *avp,
union avp_value val;
char imsi_bcd[OGS_MAX_IMSI_BCD_LEN+1];
ogs_s_nssai_t s_nssai;
int rv;
uint32_t result_code = 0;
@ -463,13 +462,10 @@ static int hss_ogs_diam_s6a_ulr_cb( struct msg **msg, struct avp *avp,
ret = fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, avp_rau_tau_timer);
ogs_assert(ret == 0);
/* For EPC, we'll use SST:1 */
s_nssai.sst = 1;
s_nssai.sd.v = OGS_S_NSSAI_NO_SD_VALUE;
/* For EPC, we'll use first Slice in Subscription */
if (subscription_data.num_of_slice)
slice_data = &subscription_data.slice[0];
slice_data = ogs_slice_find_by_s_nssai(
subscription_data.slice, subscription_data.num_of_slice,
&s_nssai);
if (!slice_data) {
ogs_error("[%s] Cannot find S-NSSAI", imsi_bcd);
result_code = OGS_DIAM_S6A_ERROR_UNKNOWN_EPS_SUBSCRIPTION;

View File

@ -388,7 +388,6 @@ static int hss_ogs_diam_swx_sar_cb( struct msg **msg, struct avp *avp,
union avp_value val;
char *user_name = NULL;
ogs_s_nssai_t s_nssai;
char imsi_bcd[OGS_MAX_IMSI_BCD_LEN+1];
@ -557,13 +556,10 @@ static int hss_ogs_diam_swx_sar_cb( struct msg **msg, struct avp *avp,
ret = fd_msg_avp_add(avp, MSG_BRW_LAST_CHILD, avp_ambr);
ogs_assert(ret == 0);
/* For EPC, we'll use SST:1 */
s_nssai.sst = 1;
s_nssai.sd.v = OGS_S_NSSAI_NO_SD_VALUE;
/* For EPC, we'll use first Slice in Subscription */
if (subscription_data.num_of_slice)
slice_data = &subscription_data.slice[0];
slice_data = ogs_slice_find_by_s_nssai(
subscription_data.slice, subscription_data.num_of_slice,
&s_nssai);
if (!slice_data) {
ogs_error("[%s] Cannot find S-NSSAI", imsi_bcd);
result_code = OGS_DIAM_S6A_ERROR_UNKNOWN_EPS_SUBSCRIPTION;

View File

@ -271,7 +271,6 @@ int pcrf_db_qos_data(
{
int rv, i;
char *supi = NULL;
ogs_s_nssai_t s_nssai;
ogs_assert(imsi_bcd);
ogs_assert(apn);
@ -281,11 +280,8 @@ int pcrf_db_qos_data(
supi = ogs_msprintf("%s-%s", OGS_ID_SUPI_TYPE_IMSI, imsi_bcd);
ogs_assert(supi);
/* For EPC, we'll use SST:1 */
s_nssai.sst = 1;
s_nssai.sd.v = OGS_S_NSSAI_NO_SD_VALUE;
rv = ogs_dbi_session_data(supi, &s_nssai, apn, session_data);
/* For EPC, we'll use [S_NSSAI = NULL] */
rv = ogs_dbi_session_data(supi, NULL, apn, session_data);
/* For EPC, we need to inialize Flow-Status in Pcc-Rule */
for (i = 0; i < session_data->num_of_pcc_rule; i++) {