[GTP] avoid abort for ogs_gtp_node_new() (#1633)

This commit is contained in:
Sukchan Lee 2022-06-29 11:07:44 +09:00
parent c5a545039f
commit 52d5c61794
3 changed files with 45 additions and 11 deletions

View File

@ -427,12 +427,19 @@ int ogs_ip_to_sockaddr(ogs_ip_t *ip, uint16_t port, ogs_sockaddr_t **list)
ogs_assert(list);
addr = ogs_calloc(1, sizeof(ogs_sockaddr_t));
ogs_expect_or_return_val(addr, OGS_ERROR);
if (!addr) {
ogs_error("ogs_calloc() failed");
return OGS_ERROR;
}
addr->ogs_sa_family = AF_INET;
addr->ogs_sin_port = htobe16(port);
addr6 = ogs_calloc(1, sizeof(ogs_sockaddr_t));
ogs_expect_or_return_val(addr6, OGS_ERROR);
if (!addr6) {
ogs_error("ogs_calloc() failed");
ogs_free(addr);
return OGS_ERROR;
}
addr6->ogs_sa_family = AF_INET6;
addr6->ogs_sin_port = htobe16(port);
@ -454,6 +461,7 @@ int ogs_ip_to_sockaddr(ogs_ip_t *ip, uint16_t port, ogs_sockaddr_t **list)
*list = addr6;
} else {
ogs_error("No IPv4 and IPv6");
ogs_free(addr);
ogs_free(addr6);
return OGS_ERROR;

View File

@ -570,7 +570,10 @@ ogs_gtp_node_t *ogs_gtp_node_add_by_f_teid(
ogs_app()->parameter.no_ipv4,
ogs_app()->parameter.no_ipv6,
ogs_app()->parameter.prefer_ipv4);
ogs_assert(addr);
if (!addr) {
ogs_error("ogs_filter_ip_version() failed");
return NULL;
}
#if 0 /* deprecated */
rv = ogs_socknode_fill_scope_id_in_local(addr);
@ -578,10 +581,18 @@ ogs_gtp_node_t *ogs_gtp_node_add_by_f_teid(
#endif
node = ogs_gtp_node_new(addr);
ogs_expect_or_return_val(node, NULL);
if (!node) {
ogs_error("ogs_gtp_node_new() failed");
ogs_freeaddrinfo(addr);
return NULL;
}
rv = ogs_gtp2_f_teid_to_ip(f_teid, &node->ip);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
if (rv != OGS_OK) {
ogs_error("ogs_gtp2_f_teid_to_ip() failed");
ogs_freeaddrinfo(addr);
return NULL;
}
ogs_list_add(list, node);
@ -598,7 +609,11 @@ 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);
if (!gnode) {
ogs_error("ogs_gtp_node_new() failed");
ogs_freeaddrinfo(new);
return NULL;
}
memcpy(&gnode->addr, new, sizeof gnode->addr);
@ -680,15 +695,22 @@ ogs_gtp_node_t *ogs_gtp_node_add_by_ip(
ogs_app()->parameter.no_ipv4,
ogs_app()->parameter.no_ipv6,
ogs_app()->parameter.prefer_ipv4);
ogs_expect_or_return_val(addr, NULL);
if (!addr) {
ogs_error("ogs_filter_ip_version() failed");
return NULL;
}
#if 0 /* deprecated */
rv = ogs_socknode_fill_scope_id_in_local(addr);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
ogs_assert(rv == OGS_OK);
#endif
node = ogs_gtp_node_new(addr);
ogs_expect_or_return_val(node, NULL);
if (!node) {
ogs_error("ogs_gtp_node_new() failed");
ogs_freeaddrinfo(addr);
return NULL;
}
memcpy(&node->ip, ip, sizeof(*ip));

View File

@ -33,7 +33,11 @@ int ogs_gtp2_f_teid_to_sockaddr(
addr->ogs_sin_port = htobe16(port);
addr6 = ogs_calloc(1, sizeof(ogs_sockaddr_t));
ogs_expect_or_return_val(addr6, OGS_ERROR);
if (!addr6) {
ogs_error("ogs_calloc() failed");
ogs_free(addr);
return OGS_ERROR;
}
addr6->ogs_sa_family = AF_INET6;
addr6->ogs_sin_port = htobe16(port);
@ -55,9 +59,9 @@ int ogs_gtp2_f_teid_to_sockaddr(
*list = addr6;
} else {
ogs_error("No IPv4 or IPv6");
ogs_free(addr);
ogs_free(addr6);
ogs_error("No IPv4 or IPv6");
return OGS_ERROR;
}