Login | Register For Free | Help
Search for: (Advanced)

Mailing List Archive: Quagga: Dev

[PATCH 1/6] bgpd: Fix memory leak with 'set ip next-hop peer-address'

 

 

Quagga dev RSS feed   Index | Next | Previous | View Threaded


jorge at dti2

Apr 10, 2012, 7:57 AM

Post #1 of 1 (106 views)
Permalink
[PATCH 1/6] bgpd: Fix memory leak with 'set ip next-hop peer-address'

From: "Jorge Boncompte [DTI2]" <jorge [at] dti2>

A route-map with the mentioned statement causes a memory leak for every
prefix that matches.

Signed-off-by: Jorge Boncompte [DTI2] <jorge [at] dti2>
---
bgpd/bgp_routemap.c | 7 ++-----
lib/sockunion.h | 2 ++
2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/bgpd/bgp_routemap.c b/bgpd/bgp_routemap.c
index abb85fd..d81d3db 100644
--- a/bgpd/bgp_routemap.c
+++ b/bgpd/bgp_routemap.c
@@ -878,7 +878,6 @@ route_set_ip_nexthop (void *rule, struct prefix *prefix,
route_map_object_t type, void *object)
{
struct rmap_ip_nexthop_set *rins = rule;
- struct in_addr peer_address;
struct bgp_info *bgp_info;
struct peer *peer;

@@ -894,16 +893,14 @@ route_set_ip_nexthop (void *rule, struct prefix *prefix,
&& peer->su_remote
&& sockunion_family (peer->su_remote) == AF_INET)
{
- inet_aton (sockunion_su2str (peer->su_remote), &peer_address);
- bgp_info->attr->nexthop = peer_address;
+ bgp_info->attr->nexthop.s_addr = sockunion2ip (peer->su_remote);
bgp_info->attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP);
}
else if (CHECK_FLAG (peer->rmap_type, PEER_RMAP_TYPE_OUT)
&& peer->su_local
&& sockunion_family (peer->su_local) == AF_INET)
{
- inet_aton (sockunion_su2str (peer->su_local), &peer_address);
- bgp_info->attr->nexthop = peer_address;
+ bgp_info->attr->nexthop.s_addr = sockunion2ip (peer->su_local);
bgp_info->attr->flag |= ATTR_FLAG_BIT (BGP_ATTR_NEXT_HOP);
}
}
diff --git a/lib/sockunion.h b/lib/sockunion.h
index 4531f62..15b97fc 100644
--- a/lib/sockunion.h
+++ b/lib/sockunion.h
@@ -86,6 +86,8 @@ enum connect_result

#define sockunion_family(X) (X)->sa.sa_family

+#define sockunion2ip(X) (X)->sin.sin_addr.s_addr
+
/* Prototypes. */
extern int str2sockunion (const char *, union sockunion *);
extern const char *sockunion2str (union sockunion *, char *, size_t);
--
1.7.8.3


_______________________________________________
Quagga-dev mailing list
Quagga-dev [at] lists
http://lists.quagga.net/mailman/listinfo/quagga-dev

Quagga dev RSS feed   Index | Next | Previous | View Threaded
 
 


Interested in having your list archived? Contact Gossamer Threads
 
  Web Applications & Managed Hosting Powered by Gossamer Threads Inc.