diff --git a/openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.c b/openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.c index cbcd767c11..62d22698d7 100644 --- a/openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.c +++ b/openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.c @@ -167,17 +167,17 @@ void capture_pdu_session_establishment_accept_msg(uint8_t *buffer, uint32_t msg_ case IEI_DNN: LOG_T(NAS, "PDU SESSION ESTABLISHMENT ACCEPT - Received DNN IE\n"); psea_msg.dnn_ie.dnn_length = *(buffer + offset++); - uint8_t i=0; - char apn[20]; + char apn[APN_MAX_LEN]; - while (*(buffer + offset + i) != ASCII_ACK) { - apn[i] = *(buffer + offset + i); - ++i; - } + if(psea_msg.dnn_ie.dnn_length <= APN_MAX_LEN && + psea_msg.dnn_ie.dnn_length >= APN_MIN_LEN) { + for (int i = 0 ; i < psea_msg.dnn_ie.dnn_length ; ++i) + apn[i] = *(buffer + offset + i); + LOG_T(NAS, "PDU SESSION ESTABLISHMENT ACCEPT - APN: %s\n", apn); + } else + LOG_E(NAS, "PDU SESSION ESTABLISHMENT ACCEPT - DNN IE has invalid length\n"); - LOG_T(NAS, "PDU SESSION ESTABLISHMENT ACCEPT - APN: %s\n", apn); - offset += psea_msg.dnn_ie.dnn_length; - psea_iei = *(buffer + offset++); + offset = msg_length; break; default: diff --git a/openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.h b/openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.h index ca92e54418..0e09425033 100644 --- a/openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.h +++ b/openair3/NAS/COMMON/ESM/MSG/PduSessionEstablishmentAccept.h @@ -54,9 +54,18 @@ #define ROC_MODIFY_QOS_RULE_WITHOUT_PF 0b110 /* Modify existing QoS rule without modifying packet filters */ #define ROC_RESERVED_1 0b111 /* Reserved */ -/* DNN - ASCII Codes */ - -#define ASCII_ACK 0x06 /* Delimiter in the DNN IEI */ +/* DNN - APN + * TS 23.003 9.1 + * The APN is composed of two parts, the APN Network Identifier (9.1.1) & The APN Operator Identifier (9.1.2). + * + * The DNN information element has a length in the range of 3 to 102 octets. + * The Header is consisted of two octets, the DNN IEI and the Length of the DNN contents fields, each is 1 octet. + * The DNN value payload starts from the 3rd octet. + * The accumulated max length of APN payload is 100 octets. + * The min length of the APN payload is 1 octet. + */ +#define APN_MAX_LEN 100 +#define APN_MIN_LEN 1 /* Mandatory Presence IE - TS 24.501 Table 8.3.2.1.1 */