]> git.puffer.fish Git - mirror/frr.git/commitdiff
BGP memory leak in peer hostname
authorDaniel Walton <dwalton@cumulusnetworks.com>
Thu, 10 Mar 2016 03:58:48 +0000 (03:58 +0000)
committerDaniel Walton <dwalton@cumulusnetworks.com>
Thu, 10 Mar 2016 03:58:48 +0000 (03:58 +0000)
Signed-off-by: Daniel Walton <dwalton@cumulusnetworks.com>
Reviewed-by: Donald Sharp <sharpd@cumulusnetworks.com>
Ticket: CM-9786

bgpd/bgp_fsm.c
bgpd/bgp_open.c

index 962c528948fa15dbd1c7792deff917efba605b0d..871467343c1f81460d4471701f954f00a7714392 100644 (file)
@@ -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++)
index 4ddc53606d826e4a2677998d81c853cec1288eb0..0adde3f894ae0cb2a7c1b033bbc762b41015f252 100644 (file)
@@ -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)
         {