From f9e9e0736f46d4c24f974babb0cc9fb715290c22 Mon Sep 17 00:00:00 2001 From: Daniel Walton Date: Thu, 10 Mar 2016 03:58:48 +0000 Subject: [PATCH 1/2] BGP memory leak in peer hostname Signed-off-by: Daniel Walton Reviewed-by: Donald Sharp Ticket: CM-9786 --- bgpd/bgp_fsm.c | 26 ++++++++++++++++++++++++-- bgpd/bgp_open.c | 5 ++++- 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) { From cea35078caf17420cd1b6cd7d18469ed7745fdcb Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Thu, 10 Mar 2016 07:51:19 -0500 Subject: [PATCH 2/2] tools: Fixup quagga systemd script to be less chatty The quagga startup script was invoking systemctl and systemctl was being very chatty in return. Ticket: CM-9749 Signed-off-by: Donald Sharp Reviewed-by: Daniel Walton --- tools/quagga | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tools/quagga b/tools/quagga index a43335ecf6..c996170244 100755 --- a/tools/quagga +++ b/tools/quagga @@ -4,18 +4,18 @@ startup() { FILE="/var/run/quagga/$1.was_running" - /bin/systemctl reset-failed $1 + /bin/systemctl reset-failed $1 > /dev/null 2>&1 if [ -e $FILE ] then rm $FILE - systemctl start $1 + /bin/systemctl start $1 > /dev/null 2>&1 fi /bin/systemctl is-enabled $1 > /dev/null 2>&1 if [ $? -eq 0 ] then - systemctl start $1 + /bin/systemctl start $1 > /dev/null 2>&1 fi } @@ -41,14 +41,14 @@ start_daemons() stop_ospfd_multiinstance() { for instance in $MI; do - /bin/systemctl stop ospfd@$instance + /bin/systemctl stop ospfd@$instance > /dev/null 2>&1 done } stop_daemons() { stop_ospfd_multiinstance - /bin/systemctl stop bgpd ospfd ospf6d ripd ripngd isisd zebra + /bin/systemctl stop bgpd ospfd ospf6d ripd ripngd isisd zebra > /dev/null 2>&1 } MI=`systemctl list-units 'ospfd@*'| sed -n -e '/@/s/\..*//' -e 's/.*@//p'`