From cfa44575020f3fb045fd971358442053c8684d3d Mon Sep 17 00:00:00 2001 From: Sukchan Lee Date: Tue, 6 May 2025 17:52:51 +0900 Subject: [PATCH] [AMF/MME] Remove fatal assertions on oversized SCTP messages in NGAP and S1AP handlers (#3878) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Previously, any SCTP recv would trigger ogs_fatal and an assert_if_reached when MSG_EOR wasn’t set, causing the AMF or MME to crash on oversized or fragmented packets. Since we rely on a 32 KB receive buffer and do not support SCTP reassembly, this change replaces the conditional fatal/assert logic with a single ogs_error call in both ngap_recv_handler and s1ap_recv_handler. Oversized or partial SCTP messages are now logged and dropped instead of crashing the process. --- src/amf/ngap-sctp.c | 10 ++-------- src/mme/s1ap-sctp.c | 10 ++-------- src/mme/sgsap-sctp.c | 10 ++-------- 3 files changed, 6 insertions(+), 24 deletions(-) diff --git a/src/amf/ngap-sctp.c b/src/amf/ngap-sctp.c index e7e8a8b7a..4dada4ef3 100644 --- a/src/amf/ngap-sctp.c +++ b/src/amf/ngap-sctp.c @@ -243,14 +243,8 @@ void ngap_recv_handler(ogs_sock_t *sock) ngap_event_push(AMF_EVENT_NGAP_MESSAGE, sock, addr, pkbuf, 0, 0); return; } else { - if (ogs_socket_errno != OGS_EAGAIN) { - ogs_fatal("ogs_sctp_recvmsg(%d) failed(%d:%s-0x%x)", - size, errno, strerror(errno), flags); - ogs_assert_if_reached(); - } else { - ogs_error("ogs_sctp_recvmsg(%d) failed(%d:%s-0x%x)", - size, errno, strerror(errno), flags); - } + ogs_error("ogs_sctp_recvmsg(%d) failed(%d:%s-0x%x)", + size, errno, strerror(errno), flags); } ogs_pkbuf_free(pkbuf); diff --git a/src/mme/s1ap-sctp.c b/src/mme/s1ap-sctp.c index 5e08c62ea..b1626e717 100644 --- a/src/mme/s1ap-sctp.c +++ b/src/mme/s1ap-sctp.c @@ -245,14 +245,8 @@ void s1ap_recv_handler(ogs_sock_t *sock) s1ap_event_push(MME_EVENT_S1AP_MESSAGE, sock, addr, pkbuf, 0, 0); return; } else { - if (ogs_socket_errno != OGS_EAGAIN) { - ogs_fatal("ogs_sctp_recvmsg(%d) failed(%d:%s-0x%x)", - size, errno, strerror(errno), flags); - ogs_assert_if_reached(); - } else { - ogs_error("ogs_sctp_recvmsg(%d) failed(%d:%s-0x%x)", - size, errno, strerror(errno), flags); - } + ogs_error("ogs_sctp_recvmsg(%d) failed(%d:%s-0x%x)", + size, errno, strerror(errno), flags); } ogs_pkbuf_free(pkbuf); diff --git a/src/mme/sgsap-sctp.c b/src/mme/sgsap-sctp.c index c262a848c..18fc354cd 100644 --- a/src/mme/sgsap-sctp.c +++ b/src/mme/sgsap-sctp.c @@ -183,14 +183,8 @@ static void recv_handler(ogs_sock_t *sock) sgsap_event_push(MME_EVENT_SGSAP_MESSAGE, sock, NULL, pkbuf, 0, 0); return; } else { - if (ogs_socket_errno != OGS_EAGAIN) { - ogs_fatal("ogs_sctp_recvmsg(%d) failed(%d:%s-0x%x)", - size, errno, strerror(errno), flags); - ogs_assert_if_reached(); - } else { - ogs_error("ogs_sctp_recvmsg(%d) failed(%d:%s-0x%x)", - size, errno, strerror(errno), flags); - } + ogs_error("ogs_sctp_recvmsg(%d) failed(%d:%s-0x%x)", + size, errno, strerror(errno), flags); } ogs_pkbuf_free(pkbuf); }