From: Daniel Walton Date: Thu, 10 Mar 2016 03:58:48 +0000 (+0000) Subject: BGP memory leak in peer hostname X-Git-Tag: frr-2.0-rc1~1066^2~1 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=f9e9e0736f46d4c24f974babb0cc9fb715290c22;p=mirror%2Ffrr.git BGP memory leak in peer hostname Signed-off-by: Daniel Walton Reviewed-by: Donald Sharp Ticket: CM-9786 --- diff --git a/bgpd/bgp_fsm.c b/bgpd/bgp_fsm.c index 962c528948..871467343c 100644 --- a/bgpd/bgp_fsm.c +++ b/bgpd/bgp_fsm.c @@ -160,10 +160,32 @@ peer_xfer_conn(struct peer *from_peer) from_peer->last_event = last_evt; from_peer->last_major_event = last_maj_evt; peer->remote_id = from_peer->remote_id; + if (from_peer->hostname != NULL) - peer->hostname = XSTRDUP(MTYPE_HOST, from_peer->hostname); + { + if (peer->hostname) + { + XFREE(MTYPE_HOST, peer->hostname); + peer->hostname = NULL; + } + + peer->hostname = XSTRDUP(MTYPE_HOST, from_peer->hostname); + XFREE(MTYPE_HOST, from_peer->hostname); + from_peer->hostname = NULL; + } + if (from_peer->domainname != NULL) - peer->domainname = XSTRDUP(MTYPE_HOST, from_peer->domainname); + { + if (peer->domainname) + { + XFREE(MTYPE_HOST, peer->domainname); + peer->domainname= NULL; + } + + peer->domainname = XSTRDUP(MTYPE_HOST, from_peer->domainname); + XFREE(MTYPE_HOST, from_peer->domainname); + from_peer->domainname = NULL; + } for (afi = AFI_IP; afi < AFI_MAX; afi++) for (safi = SAFI_UNICAST; safi < SAFI_MAX; safi++) diff --git a/bgpd/bgp_open.c b/bgpd/bgp_open.c index 4ddc53606d..0adde3f894 100644 --- a/bgpd/bgp_open.c +++ b/bgpd/bgp_open.c @@ -627,7 +627,10 @@ bgp_capability_hostname (struct peer *peer, struct capability_header *hdr) str[len] = '\0'; if (peer->hostname != NULL) - XFREE(MTYPE_HOST, peer->hostname); + { + XFREE(MTYPE_HOST, peer->hostname); + peer->hostname = NULL; + } if (peer->domainname != NULL) {