From d855c7aaabfdf0eb122bce1263668752d4c50db4 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 (cherry picked from commit 7f9c5c7fa2d927033549a806fd9025a9459f22bc) --- 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 77d06762bc51..874021bd3201 100644 --- a/zebra/rib.h +++ b/zebra/rib.h @@ -337,6 +337,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 2f50e8b8c4de..de14bb3268c6 100644 --- a/zebra/rt_netlink.c +++ b/zebra/rt_netlink.c @@ -993,6 +993,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 37814994abe7..16d7e957f933 100644 --- a/zebra/zebra_rib.c +++ b/zebra/zebra_rib.c @@ -4249,6 +4249,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