diff options
author | Alexander Couzens <lynxis@fe80.eu> | 2021-06-06 03:33:35 +0200 |
---|---|---|
committer | laforge <laforge@osmocom.org> | 2021-06-13 18:31:25 +0000 |
commit | cc56ddcdd0eb5c3a229725fce25bda861c257609 (patch) | |
tree | 9b4ece2aa927f3ed01dfe61a4d5615cdbc6c396c | |
parent | af40b0b6b9f022f727dcf992d867ba7fe8f318bf (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.c | 11 |
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); |