diff options
author | Harald Welte <laforge@osmocom.org> | 2021-03-04 13:14:05 +0100 |
---|---|---|
committer | Harald Welte <laforge@osmocom.org> | 2021-03-29 10:20:08 +0200 |
commit | c2fbbd7307e9abf4e6c52051c306917299f1eb85 (patch) | |
tree | 48fceaff0734355b2666b52295d332e243c81873 /src | |
parent | 158bc795e52c6de1e71691f71025ef4c06724a90 (diff) |
gprs_ns2_sns: Fix memory leak when creating ip[46]_local arrays
Prior to this patch, we would unconditionally allocate new memory
for the local SNS IP endpoints. This results in a memory leak
on every SNS-SIZE procedure.
Let's move to talloc_realloc() which recycles any previously allocated
memory.
Change-Id: I12cb670e087c6d6190f3f5bf8483ea62008ae06f
Diffstat (limited to 'src')
-rw-r--r-- | src/gb/gprs_ns2_sns.c | 5 |
1 files changed, 2 insertions, 3 deletions
diff --git a/src/gb/gprs_ns2_sns.c b/src/gb/gprs_ns2_sns.c index b07f010a..144ab21b 100644 --- a/src/gb/gprs_ns2_sns.c +++ b/src/gb/gprs_ns2_sns.c @@ -811,7 +811,7 @@ static void ns2_sns_compute_local_ep_from_binds(struct osmo_fsm_inst *fi) switch (gss->ip) { case IPv4: - ip4_elems = talloc_zero_size(fi, sizeof(struct gprs_ns_ie_ip4_elem) * count); + ip4_elems = talloc_realloc(fi, gss->ip4_local, struct gprs_ns_ie_ip4_elem, count); if (!ip4_elems) return; @@ -846,7 +846,7 @@ static void ns2_sns_compute_local_ep_from_binds(struct osmo_fsm_inst *fi) break; case IPv6: /* IPv6 */ - ip6_elems = talloc_zero_size(fi, sizeof(struct gprs_ns_ie_ip6_elem) * count); + ip6_elems = talloc_realloc(fi, gss->ip6_local, struct gprs_ns_ie_ip6_elem, count); if (!ip6_elems) return; @@ -925,7 +925,6 @@ static void ns2_sns_st_bss_size_onenter(struct osmo_fsm_inst *fi, uint32_t old_s gss->sns_nsvc->sns_only = true; } - if (gss->num_max_ip4_remote > 0) ns2_tx_sns_size(gss->sns_nsvc, true, gss->num_max_nsvcs, gss->num_ip4_local, -1); else |