From c5a545039fa0df0c4fe0277fde089f8bc0d031bb Mon Sep 17 00:00:00 2001 From: Pau Espin Pedrol Date: Wed, 29 Jun 2022 03:28:18 +0200 Subject: [PATCH] [GTP] Avoid abort if ogs_gtp_node_new() returns NULL (#1633) * [GTP] Avoid abort if ogs_gtp_node_new() returns NULL * [SGWC] Avoid abort if ogs_gtp_node_add_by_addr() returns NULL --- lib/gtp/context.c | 4 ++-- src/sgwc/gtp-path.c | 8 +++++++- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/lib/gtp/context.c b/lib/gtp/context.c index f5e8f10cd..e5c94f99e 100644 --- a/lib/gtp/context.c +++ b/lib/gtp/context.c @@ -578,7 +578,7 @@ ogs_gtp_node_t *ogs_gtp_node_add_by_f_teid( #endif node = ogs_gtp_node_new(addr); - ogs_assert(node); + ogs_expect_or_return_val(node, NULL); rv = ogs_gtp2_f_teid_to_ip(f_teid, &node->ip); ogs_expect_or_return_val(rv == OGS_OK, NULL); @@ -598,8 +598,8 @@ ogs_gtp_node_t *ogs_gtp_node_add_by_addr(ogs_list_t *list, ogs_sockaddr_t *addr) ogs_assert(OGS_OK == ogs_copyaddrinfo(&new, addr)); gnode = ogs_gtp_node_new(new); + ogs_expect_or_return_val(gnode, NULL); - ogs_assert(gnode); memcpy(&gnode->addr, new, sizeof gnode->addr); ogs_list_add(list, gnode); diff --git a/src/sgwc/gtp-path.c b/src/sgwc/gtp-path.c index 7a66790ec..6f1c94694 100644 --- a/src/sgwc/gtp-path.c +++ b/src/sgwc/gtp-path.c @@ -27,6 +27,7 @@ static void _gtpv2_c_recv_cb(short when, ogs_socket_t fd, void *data) ogs_pkbuf_t *pkbuf = NULL; ogs_sockaddr_t from; ogs_gtp_node_t *gnode = NULL; + char frombuf[OGS_ADDRSTRLEN]; ogs_assert(fd != INVALID_SOCKET); @@ -83,7 +84,12 @@ static void _gtpv2_c_recv_cb(short when, ogs_socket_t fd, void *data) gnode = ogs_gtp_node_find_by_addr(&sgwc_self()->mme_s11_list, &from); if (!gnode) { gnode = ogs_gtp_node_add_by_addr(&sgwc_self()->mme_s11_list, &from); - ogs_assert(gnode); + if (!gnode) { + ogs_error("Failed to create new gnode(%s:%u), mempool full, ignoring msg!", + OGS_ADDR(&from, frombuf), OGS_PORT(&from)); + ogs_pkbuf_free(pkbuf); + return; + } gnode->sock = data; } ogs_assert(e);