[FRR] Fix zebra memory leak when bgp fib suppress pending is enabled (#17484)
Fix zebra leaking memory with fib suppress enabled. Porting the fix from FRRouting/frr#14983 While running test_stress_route.py, systems with lower memory started to throw low memory logs. On further investigation, a memory leak has been found in zebra which was fixed in the FRR community.
This commit is contained in:
parent
dac2ba6e1b
commit
f3f507826b
@ -0,0 +1,57 @@
|
|||||||
|
From c13964525dae96299dc54daf635609971576a09e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Donald Sharp <sharpd@nvidia.com>
|
||||||
|
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 <sharpd@nvidia.com>
|
||||||
|
|
||||||
|
diff --git a/zebra/rib.h b/zebra/rib.h
|
||||||
|
index 016106312..e99eee67c 100644
|
||||||
|
--- a/zebra/rib.h
|
||||||
|
+++ b/zebra/rib.h
|
||||||
|
@@ -352,6 +352,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 6bdc15592..fc9e8c457 100644
|
||||||
|
--- a/zebra/rt_netlink.c
|
||||||
|
+++ b/zebra/rt_netlink.c
|
||||||
|
@@ -1001,6 +1001,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 f2f20bcf7..1cefdfae7 100644
|
||||||
|
--- a/zebra/zebra_rib.c
|
||||||
|
+++ b/zebra/zebra_rib.c
|
||||||
|
@@ -4136,6 +4136,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
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -32,3 +32,4 @@ cross-compile-changes.patch
|
|||||||
0030-bgpd-Treat-EOR-as-withdrawn-to-avoid-unwanted-handli.patch
|
0030-bgpd-Treat-EOR-as-withdrawn-to-avoid-unwanted-handli.patch
|
||||||
0031-bgpd-Ignore-handling-NLRIs-if-we-received-MP_UNREACH.patch
|
0031-bgpd-Ignore-handling-NLRIs-if-we-received-MP_UNREACH.patch
|
||||||
0032-zebra-Fix-fpm-multipath-encap-addition.patch
|
0032-zebra-Fix-fpm-multipath-encap-addition.patch
|
||||||
|
0033-zebra-The-dplane_fpm_nl-return-path-leaks-memory.patch
|
||||||
|
Loading…
Reference in New Issue
Block a user