summaryrefslogtreecommitdiffstats
path: root/zebra/zebra_rib.c
diff options
context:
space:
mode:
authorpaul <paul>2003-05-14 18:29:13 +0000
committerpaul <paul>2003-05-14 18:29:13 +0000
commit143a953120b07e7f4347a21089020b15ac831ebe (patch)
treef08e1df6f285281322dc24f1cf510226b681fd21 /zebra/zebra_rib.c
parent786ad3990f79ba1c80c4760208ccb4495eafcbb3 (diff)
downloadquagga-143a953120b07e7f4347a21089020b15ac831ebe.tar.bz2
quagga-143a953120b07e7f4347a21089020b15ac831ebe.tar.xz
From: Gilad Arnold <gilad arnold at terayon com>
Subject: [zebra 19080] suspected memory leakage upon static route deletion upon deletion of a static route entry, at the end of zebra/zebra_rib.c/static_delete_ipv4(), there's a call to XFREE to deallocate the 'struct static_ipv4'. However, in the case of a static with ifname as nexthop (type==STATIC_IPV4_IFNAME), this struct holds a pointer to a dynamically allocated ifname string buffer (si->gate.ifname, see its allocation within static_add_ipv4() using XSTRDUP). IMO, the attached patch is required. Notes: the same applies to IPv6 statics as well (fix included in patch); and, I admit I haven't yet tested that, but it seems simple enough to be working... ;->
Diffstat (limited to 'zebra/zebra_rib.c')
-rw-r--r--zebra/zebra_rib.c4
1 files changed, 4 insertions, 0 deletions
diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c
index 0f7ccebc..f3b9fd65 100644
--- a/zebra/zebra_rib.c
+++ b/zebra/zebra_rib.c
@@ -1554,6 +1554,8 @@ static_delete_ipv4 (struct prefix *p, struct in_addr *gate, char *ifname,
si->next->prev = si->prev;
/* Free static route configuration. */
+ if (ifname)
+ XFREE (0, si->gate.ifname);
XFREE (MTYPE_STATIC_IPV4, si);
return 1;
@@ -2078,6 +2080,8 @@ static_delete_ipv6 (struct prefix *p, u_char type, struct in6_addr *gate,
si->next->prev = si->prev;
/* Free static route configuration. */
+ if (ifname)
+ XFREE (0, si->ifname);
XFREE (MTYPE_STATIC_IPV6, si);
return 1;