From 7f9c5c7fa2d927033549a806fd9025a9459f22bc Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Mon, 11 Dec 2023 13:41:36 -0500 Subject: [PATCH] zebra: The dplane_fpm_nl return path leaks memory 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 --- zebra/rib.h | 2 ++ zebra/rt_netlink.c | 2 ++ zebra/zebra_rib.c | 6 ++++++ 3 files changed, 10 insertions(+) diff --git a/zebra/rib.h b/zebra/rib.h index 61d9953d81af..4c817eca71c7 100644 --- a/zebra/rib.h +++ b/zebra/rib.h @@ -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, diff --git a/zebra/rt_netlink.c b/zebra/rt_netlink.c index e23b937d5a2f..98bb890eb682 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -1027,6 +1027,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 diff --git a/zebra/zebra_rib.c b/zebra/zebra_rib.c index 980fced8a73c..c03d7e51f87a 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -4305,6 +4305,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