]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: Cleanup memory for missing hashes
authorDonatas Abraitis <donatas@opensourcerouting.org>
Tue, 30 Aug 2022 10:46:26 +0000 (13:46 +0300)
committerDonatas Abraitis <donatas@opensourcerouting.org>
Tue, 30 Aug 2022 10:46:26 +0000 (13:46 +0300)
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
bgpd/bgp_evpn.c
bgpd/bgp_evpn_mh.c

index ce05005eab25b7d50bb0203c6900a6ba9dc89704..dc15d9c6951fe7ce408ba3e9eeb06efe1742daa8 100644 (file)
@@ -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);
index 95a0c31b559d02df3b6bc52bd20890c1710e89f0..de63618580bd73880a7a59b3041f5e74be1e3a0c 100644 (file)
@@ -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;
 }