aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAlexander Couzens <lynxis@fe80.eu>2021-06-06 03:33:35 +0200
committerlaforge <laforge@osmocom.org>2021-06-13 18:31:25 +0000
commitcc56ddcdd0eb5c3a229725fce25bda861c257609 (patch)
tree9b4ece2aa927f3ed01dfe61a4d5615cdbc6c396c
parentaf40b0b6b9f022f727dcf992d867ba7fe8f318bf (diff)
gprs_ns2_sns: add check for duplicates to add_ip6_elem()
The ip4 version already checks for duplicates. Related: OS#5036 Change-Id: I4a1528ea3427946ce465085919b2b522d3cedd07
-rw-r--r--src/gb/gprs_ns2_sns.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/src/gb/gprs_ns2_sns.c b/src/gb/gprs_ns2_sns.c
index c50b2b94..1204266b 100644
--- a/src/gb/gprs_ns2_sns.c
+++ b/src/gb/gprs_ns2_sns.c
@@ -452,10 +452,8 @@ static int create_missing_nsvcs(struct osmo_fsm_inst *fi)
static int add_ip4_elem(struct ns2_sns_state *gss, struct ns2_sns_elems *elems,
const struct gprs_ns_ie_ip4_elem *ip4)
{
- unsigned int i;
-
/* check for duplicates */
- for (i = 0; i < elems->num_ip4; i++) {
+ for (unsigned int i = 0; i < elems->num_ip4; i++) {
if (memcmp(&elems->ip4[i], ip4, sizeof(*ip4)))
continue;
return -1;
@@ -507,6 +505,13 @@ static int update_ip4_elem(struct ns2_sns_state *gss, struct ns2_sns_elems *elem
static int add_ip6_elem(struct ns2_sns_state *gss, struct ns2_sns_elems *elems,
const struct gprs_ns_ie_ip6_elem *ip6)
{
+ /* check for duplicates */
+ for (unsigned int i = 0; i < elems->num_ip6; i++) {
+ if (memcmp(&elems->ip6[i].ip_addr, &ip6->ip_addr, sizeof(ip6->ip_addr)) ||
+ elems->ip6[i].udp_port != ip6->udp_port)
+ continue;
+ return -1;
+ }
elems->ip6 = talloc_realloc(gss, elems->ip6, struct gprs_ns_ie_ip6_elem,
elems->num_ip6+1);