summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--bgpd/bgp_fsm.c26
-rw-r--r--bgpd/bgp_open.c5
2 files changed, 28 insertions, 3 deletions
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)
{