bgpd: Fix memory leak of some "show ip bgp neighbor" commands
sockunion_str2su() use is prone to memory leaks. Remove it's use all over
the code.
At least these commands leaked a sockunion union:
- show ip bgp vpnv4 ... routes
- show ip bgp ... received prefix-filter
Signed-off-by: Jorge Boncompte [DTI2] <jorge@dti2.net>
Signed-off-by: David Lamparter <equinox@diac24.net>
diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c
index fa645ac..f220400 100644
--- a/bgpd/bgp_routemap.c
+++ b/bgpd/bgp_routemap.c
@@ -111,7 +111,8 @@
void *object)
{
union sockunion *su;
- union sockunion *su2;
+ union sockunion su_def = { .sa.sa_family = AF_INET,
+ .sin.sin_addr.s_addr = INADDR_ANY };
struct peer_group *group;
struct peer *peer;
struct listnode *node, *nnode;
@@ -127,8 +128,7 @@
/* If su='0.0.0.0' (command 'match peer local'), and it's a NETWORK,
REDISTRIBUTE or DEFAULT_GENERATED route => return RMAP_MATCH */
- su2 = sockunion_str2su ("0.0.0.0");
- if ( sockunion_same (su, su2) )
+ if (sockunion_same (su, &su_def))
{
int ret;
if ( CHECK_FLAG (peer->rmap_type, PEER_RMAP_TYPE_NETWORK) ||
@@ -137,12 +137,9 @@
ret = RMAP_MATCH;
else
ret = RMAP_NOMATCH;
-
- sockunion_free (su2);
return ret;
}
- sockunion_free (su2);
-
+
if (! CHECK_FLAG (peer->sflags, PEER_STATUS_GROUP))
{
if (sockunion_same (su, &peer->su))