]> git.puffer.fish Git - matthieu/frr.git/commitdiff
zebra: The dplane_fpm_nl return path leaks memory
authorDonald Sharp <sharpd@nvidia.com>
Mon, 11 Dec 2023 18:41:36 +0000 (13:41 -0500)
committerMergify <37929162+mergify[bot]@users.noreply.github.com>
Tue, 12 Dec 2023 06:45:31 +0000 (06:45 +0000)
The route entry created when using a ctx to pass route
entry data backup to the master pthread in zebra is
being leaked.  Prevent this from happening.

Signed-off-by: Donald Sharp <sharpd@nvidia.com>
(cherry picked from commit 7f9c5c7fa2d927033549a806fd9025a9459f22bc)

zebra/rib.h
zebra/rt_netlink.c
zebra/zebra_rib.c

index e70b5c1423636d206cfd490b2a428d3b358d6873..f53c02bc2c123eb2bcdc0399402569a4ab1aa8c9 100644 (file)
@@ -345,6 +345,8 @@ extern void _route_entry_dump(const char *func, union prefixconstptr pp,
                              union prefixconstptr src_pp,
                              const struct route_entry *re);
 
+void zebra_rib_route_entry_free(struct route_entry *re);
+
 struct route_entry *
 zebra_rib_route_entry_new(vrf_id_t vrf_id, int type, uint8_t instance,
                          uint32_t flags, uint32_t nhe_id, uint32_t table_id,
index b8362bbba5ec6e00e91ed69bd87988a188180c1a..7b29c0549887db9fe19a7d3f8d23c48918b58977 100644 (file)
@@ -1025,6 +1025,8 @@ int netlink_route_change_read_unicast_internal(struct nlmsghdr *h,
                                                 re, ng, startup, ctx);
                        if (ng)
                                nexthop_group_delete(&ng);
+                       if (ctx)
+                               zebra_rib_route_entry_free(re);
                } else {
                        /*
                         * I really don't see how this is possible
index 51af8953ed9491d2d4aab088f385c2de3c8a7790..0f559e874fd80abba1f50a8cdf66e63f0443a4c8 100644 (file)
@@ -4267,6 +4267,12 @@ struct route_entry *zebra_rib_route_entry_new(vrf_id_t vrf_id, int type,
 
        return re;
 }
+
+void zebra_rib_route_entry_free(struct route_entry *re)
+{
+       XFREE(MTYPE_RE, re);
+}
+
 /*
  * Internal route-add implementation; there are a couple of different public
  * signatures. Callers in this path are responsible for the memory they