From: Sarita Patra Date: Tue, 12 Jan 2021 10:46:35 +0000 (-0800) Subject: bgpd : multiple memory leak fixes in show commands X-Git-Tag: base_7.6~4^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=d5f20468407f6932669de731a0590b7e2854bc54;p=mirror%2Ffrr.git bgpd : multiple memory leak fixes in show commands Issue: bgpd got kill due to out of memory, when show bgp neighbor json and show ip bgp neighbor routes json commands executed multiple times in a setup having 320554 routes. RCA: Heap allocated for bgpd keeps increasing. This is verified using top command and show memory command. Memleak Fix-1: show ip bgp route json command When dumping a large bit of table data via bgp_show_route and if there is no information to display for a particular struct bgp_node *` the data allocated via json_object_new_array() is not freed. This is resolved now. Memleak Fix-2: The function bgp_peer_counts() doesn't free the memory allocated for json_loop when there is No such neighbor or address family. This is fixed now. Signed-off-by: Sarita Patra --- diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index c4ab223b7f..1d1f3d9b26 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -11262,8 +11262,13 @@ static int bgp_show_route_in_table(struct vty *vty, struct bgp *bgp, vty, use_json, json_paths); - if (use_json && display) - json_object_object_add(json, "paths", json_paths); + if (use_json) { + if (display) + json_object_object_add(json, "paths", + json_paths); + else + json_object_free(json_paths); + } } else { if ((dest = bgp_node_match(rib, &match)) != NULL) { const struct prefix *dest_p = bgp_dest_get_prefix(dest); @@ -12742,6 +12747,7 @@ static int bgp_peer_counts(struct vty *vty, struct peer *peer, afi_t afi, "No such neighbor or address family"); vty_out(vty, "%s\n", json_object_to_json_string(json)); json_object_free(json); + json_object_free(json_loop); } else vty_out(vty, "%% No such neighbor or address family\n");