From 85981effc71da144ee484652b0be29cf29556b0e Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Wed, 25 Jan 2023 23:16:59 +0900 Subject: [PATCH] [AMF/AMF] Not assert for ogs_asn_copy_ie() (#2018) Does not raise an assertion even if open5gs cannot handle the ASN in ogs_asn_copy_ie() --- src/amf/ngap-build.c | 14 +++++++++++--- src/amf/ngap-build.h | 2 +- src/amf/ngap-handler.c | 6 ++++-- src/amf/ngap-path.c | 2 +- src/mme/s1ap-build.c | 12 ++++++++++-- src/mme/s1ap-handler.c | 6 ++++-- 6 files changed, 31 insertions(+), 11 deletions(-) diff --git a/src/amf/ngap-build.c b/src/amf/ngap-build.c index f8228393a..4f1dbb529 100644 --- a/src/amf/ngap-build.c +++ b/src/amf/ngap-build.c @@ -1907,7 +1907,11 @@ ogs_pkbuf_t *ngap_build_downlink_ran_configuration_transfer( rv = ogs_asn_copy_ie(&asn_DEF_NGAP_SONConfigurationTransfer, transfer, SONConfigurationTransfer); - ogs_assert(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_asn_copy_ie() failed"); + ogs_asn_free(&asn_DEF_NGAP_NGAP_PDU, &pdu); + return NULL; + } return ogs_ngap_encode(&pdu); } @@ -2647,7 +2651,7 @@ ogs_pkbuf_t *ngap_build_handover_cancel_ack(ran_ue_t *source_ue) return ogs_ngap_encode(&pdu); } -ogs_pkbuf_t *ngap_build_uplink_ran_status_transfer( +ogs_pkbuf_t *ngap_build_downlink_ran_status_transfer( ran_ue_t *target_ue, NGAP_RANStatusTransfer_TransparentContainer_t *transfer) { @@ -2722,7 +2726,11 @@ ogs_pkbuf_t *ngap_build_uplink_ran_status_transfer( rv = ogs_asn_copy_ie( &asn_DEF_NGAP_RANStatusTransfer_TransparentContainer, transfer, RANStatusTransfer_TransparentContainer); - ogs_assert(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_asn_copy_ie() failed"); + ogs_asn_free(&asn_DEF_NGAP_NGAP_PDU, &pdu); + return NULL; + } return ogs_ngap_encode(&pdu); } diff --git a/src/amf/ngap-build.h b/src/amf/ngap-build.h index 16b59fa43..dc0815b38 100644 --- a/src/amf/ngap-build.h +++ b/src/amf/ngap-build.h @@ -68,7 +68,7 @@ ogs_pkbuf_t *ngap_build_handover_preparation_failure( ogs_pkbuf_t *ngap_build_handover_command(ran_ue_t *source_ue); ogs_pkbuf_t *ngap_build_handover_cancel_ack(ran_ue_t *source_ue); -ogs_pkbuf_t *ngap_build_uplink_ran_status_transfer( +ogs_pkbuf_t *ngap_build_downlink_ran_status_transfer( ran_ue_t *target_ue, NGAP_RANStatusTransfer_TransparentContainer_t *transfer); diff --git a/src/amf/ngap-handler.c b/src/amf/ngap-handler.c index 21deaf843..de1742446 100644 --- a/src/amf/ngap-handler.c +++ b/src/amf/ngap-handler.c @@ -2565,7 +2565,8 @@ void ngap_handle_uplink_ran_configuration_transfer( r = ngap_send_downlink_ran_configuration_transfer( target_gnb, SONConfigurationTransfer); ogs_expect(r == OGS_OK); - ogs_assert(r != OGS_ERROR); + /* ogs_asn_copy_ie() could be failed from received packet. + * So we should not use ogs_assert(r != OGS_ERROR).*/ } } @@ -3840,7 +3841,8 @@ void ngap_handle_uplink_ran_status_transfer( r = ngap_send_downlink_ran_status_transfer( target_ue, RANStatusTransfer_TransparentContainer); ogs_expect(r == OGS_OK); - ogs_assert(r != OGS_ERROR); + /* ogs_asn_copy_ie() could be failed from received packet. + * So we should not use ogs_assert(r != OGS_ERROR).*/ } void ngap_handle_handover_notification( diff --git a/src/amf/ngap-path.c b/src/amf/ngap-path.c index 873f61497..5d0ff6511 100644 --- a/src/amf/ngap-path.c +++ b/src/amf/ngap-path.c @@ -573,7 +573,7 @@ int ngap_send_downlink_ran_status_transfer( ogs_assert(target_ue); ogs_assert(transfer); - ngapbuf = ngap_build_uplink_ran_status_transfer(target_ue, transfer); + ngapbuf = ngap_build_downlink_ran_status_transfer(target_ue, transfer); if (!ngapbuf) { ogs_error("ngap_build_uplink_ran_status_transfer() failed"); return OGS_ERROR; diff --git a/src/mme/s1ap-build.c b/src/mme/s1ap-build.c index f99b77fa7..01f2eccad 100644 --- a/src/mme/s1ap-build.c +++ b/src/mme/s1ap-build.c @@ -1551,7 +1551,11 @@ ogs_pkbuf_t *s1ap_build_mme_configuration_transfer( rv = ogs_asn_copy_ie(&asn_DEF_S1AP_SONConfigurationTransfer, son_configuration_transfer, SONConfigurationTransfer); - ogs_assert(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_asn_copy_ie() failed"); + ogs_asn_free(&asn_DEF_S1AP_S1AP_PDU, &pdu); + return NULL; + } return ogs_s1ap_encode(&pdu); } @@ -2371,7 +2375,11 @@ ogs_pkbuf_t *s1ap_build_mme_status_transfer( &asn_DEF_S1AP_ENB_StatusTransfer_TransparentContainer, enb_statustransfer_transparentContainer, ENB_StatusTransfer_TransparentContainer); - ogs_assert(rv == OGS_OK); + if (rv != OGS_OK) { + ogs_error("ogs_asn_copy_ie() failed"); + ogs_asn_free(&asn_DEF_S1AP_S1AP_PDU, &pdu); + return NULL; + } return ogs_s1ap_encode(&pdu); } diff --git a/src/mme/s1ap-handler.c b/src/mme/s1ap-handler.c index b0cefd647..1d0520500 100644 --- a/src/mme/s1ap-handler.c +++ b/src/mme/s1ap-handler.c @@ -2218,7 +2218,8 @@ void s1ap_handle_enb_configuration_transfer( r = s1ap_send_mme_configuration_transfer( target_enb, SONConfigurationTransfer); ogs_expect(r == OGS_OK); - ogs_assert(r != OGS_ERROR); + /* ogs_asn_copy_ie() could be failed from received packet. + * So we should not use ogs_assert(r != OGS_ERROR).*/ } } @@ -2957,7 +2958,8 @@ void s1ap_handle_enb_status_transfer( r = s1ap_send_mme_status_transfer(target_ue, ENB_StatusTransfer_TransparentContainer); ogs_expect(r == OGS_OK); - ogs_assert(r != OGS_ERROR); + /* ogs_asn_copy_ie() could be failed from received packet. + * So we should not use ogs_assert(r != OGS_ERROR).*/ } void s1ap_handle_handover_notification(