From 3727e359e3c7854f96e529c72e63ffff98739c7f Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Tue, 30 Aug 2022 13:46:26 +0300 Subject: [PATCH] bgpd: Cleanup memory for missing hashes Signed-off-by: Donatas Abraitis --- bgpd/bgp_evpn.c | 19 +++++++++++++++++++ bgpd/bgp_evpn_mh.c | 6 ++++++ 2 files changed, 25 insertions(+) diff --git a/bgpd/bgp_evpn.c b/bgpd/bgp_evpn.c index ce05005eab..dc15d9c695 100644 --- a/bgpd/bgp_evpn.c +++ b/bgpd/bgp_evpn.c @@ -191,6 +191,11 @@ static void vrf_import_rt_free(struct vrf_irt_node *irt) XFREE(MTYPE_BGP_EVPN_VRF_IMPORT_RT, irt); } +static void hash_vrf_import_rt_free(struct vrf_irt_node *irt) +{ + XFREE(MTYPE_BGP_EVPN_VRF_IMPORT_RT, irt); +} + /* * Function to lookup Import RT node - used to map a RT to set of * VNIs importing routes with that RT. @@ -281,6 +286,11 @@ static void import_rt_free(struct bgp *bgp, struct irt_node *irt) XFREE(MTYPE_BGP_EVPN_IMPORT_RT, irt); } +static void hash_import_rt_free(struct irt_node *irt) +{ + XFREE(MTYPE_BGP_EVPN_IMPORT_RT, irt); +} + /* * Function to lookup Import RT node - used to map a RT to set of * VNIs importing routes with that RT. @@ -5355,6 +5365,11 @@ void bgp_evpn_free(struct bgp *bgp, struct bgpevpn *vpn) XFREE(MTYPE_BGP_EVPN, vpn); } +static void hash_evpn_free(struct bgpevpn *vpn) +{ + XFREE(MTYPE_BGP_EVPN, vpn); +} + /* * Import evpn route from global table to VNI/VRF/ESI. */ @@ -5963,12 +5978,16 @@ void bgp_evpn_cleanup(struct bgp *bgp) (void (*)(struct hash_bucket *, void *))free_vni_entry, bgp); + hash_clean(bgp->import_rt_hash, (void (*)(void *))hash_import_rt_free); hash_free(bgp->import_rt_hash); bgp->import_rt_hash = NULL; + hash_clean(bgp->vrf_import_rt_hash, + (void (*)(void *))hash_vrf_import_rt_free); hash_free(bgp->vrf_import_rt_hash); bgp->vrf_import_rt_hash = NULL; + hash_clean(bgp->vni_svi_hash, (void (*)(void *))hash_evpn_free); hash_free(bgp->vni_svi_hash); bgp->vni_svi_hash = NULL; hash_free(bgp->vnihash); diff --git a/bgpd/bgp_evpn_mh.c b/bgpd/bgp_evpn_mh.c index 95a0c31b55..de63618580 100644 --- a/bgpd/bgp_evpn_mh.c +++ b/bgpd/bgp_evpn_mh.c @@ -4548,6 +4548,11 @@ static void bgp_evpn_nh_del(struct bgp_evpn_nh *n) XFREE(MTYPE_BGP_EVPN_NH, tmp_n); } +static void hash_evpn_nh_free(struct bgp_evpn_nh *ben) +{ + XFREE(MTYPE_BGP_EVPN_NH, ben); +} + static unsigned int bgp_evpn_nh_hash_keymake(const void *p) { const struct bgp_evpn_nh *n = p; @@ -4612,6 +4617,7 @@ void bgp_evpn_nh_finish(struct bgp *bgp_vrf) bgp_vrf->evpn_nh_table, (void (*)(struct hash_bucket *, void *))bgp_evpn_nh_flush_cb, NULL); + hash_clean(bgp_vrf->evpn_nh_table, (void (*)(void *))hash_evpn_nh_free); hash_free(bgp_vrf->evpn_nh_table); bgp_vrf->evpn_nh_table = NULL; } -- 2.39.5