diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index 4c151b2d37..919d3f034d 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -3713,6 +3713,17 @@ int bgp_delete(struct bgp *bgp) bgp->vpn_policy[afi].import_redirect_rtlist = NULL; } + /* Free any memory allocated to holding routemap references */ + for (afi = 0; afi < AFI_MAX; ++afi) { + for (enum vpn_policy_direction dir = 0; + dir < BGP_VPN_POLICY_DIR_MAX; ++dir) { + if (bgp->vpn_policy[afi].rmap_name[dir]) + XFREE(MTYPE_ROUTE_MAP_NAME, + bgp->vpn_policy[afi].rmap_name[dir]); + bgp->vpn_policy[afi].rmap[dir] = NULL; + } + } + /* Deregister from Zebra, if needed */ if (IS_BGP_INST_KNOWN_TO_ZEBRA(bgp)) { if (BGP_DEBUG(zebra, ZEBRA))