From 5e1191121b25ff2a4b1d00cf3a28be21f1f026a5 Mon Sep 17 00:00:00 2001 From: Philippe Guibert Date: Mon, 20 Aug 2018 18:32:00 +0200 Subject: [PATCH] bgpd: avoid memory leak in bgp flowspec list, plus usage of bool Avoid memory leak in bgp flowspec list. Usage of bool parameter instead of int, to handle the number of entries PBR. Signed-off-by: Philippe Guibert --- bgpd/bgp_flowspec_vty.c | 12 ++++++------ bgpd/bgp_route.c | 3 +-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/bgpd/bgp_flowspec_vty.c b/bgpd/bgp_flowspec_vty.c index 0f06de3ebe..1f5f685890 100644 --- a/bgpd/bgp_flowspec_vty.c +++ b/bgpd/bgp_flowspec_vty.c @@ -335,7 +335,7 @@ void route_vty_out_flowspec(struct vty *vty, struct prefix *p, struct listnode *node; struct bgp_pbr_match_entry *bpme; struct bgp_pbr_match *bpm; - int unit = 0; + bool list_began = false; struct list *list_bpm; list_bpm = list_new(); @@ -347,17 +347,17 @@ void route_vty_out_flowspec(struct vty *vty, struct prefix *p, if (listnode_lookup(list_bpm, bpm)) continue; listnode_add(list_bpm, bpm); - if (unit == 0) + if (!list_began) { vty_out(vty, " ("); - else + list_began = true; + } else vty_out(vty, ", "); vty_out(vty, "%s", bpm->ipset_name); - unit++; } - if (unit) + if (list_began) vty_out(vty, ")"); vty_out(vty, "\n"); - list_delete_all_node(list_bpm); + list_delete_and_null(&list_bpm); } else vty_out(vty, "\tnot installed in PBR\n"); } diff --git a/bgpd/bgp_route.c b/bgpd/bgp_route.c index c890435247..ac688d72ab 100644 --- a/bgpd/bgp_route.c +++ b/bgpd/bgp_route.c @@ -181,8 +181,7 @@ static void bgp_info_extra_free(struct bgp_info_extra **extra) (*extra)->damp_info = NULL; if ((*extra)->bgp_fs_pbr) - list_delete_all_node((*extra)->bgp_fs_pbr); - (*extra)->bgp_fs_pbr = NULL; + list_delete_and_null(&((*extra)->bgp_fs_pbr)); XFREE(MTYPE_BGP_ROUTE_EXTRA, *extra); -- 2.39.5