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
e676ad1aa0
commit
27b05ddac3
@ -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
|
||||
|
@ -29,6 +29,7 @@ cross-compile-changes.patch
|
||||
0030-bgpd-Treat-EOR-as-withdrawn-to-avoid-unwanted-handli.patch
|
||||
0031-bgpd-Ignore-handling-NLRIs-if-we-received-MP_UNREACH.patch
|
||||
0032-zebra-Fix-fpm-multipath-encap-addition.patch
|
||||
0033-zebra-The-dplane_fpm_nl-return-path-leaks-memory.patch
|
||||
0034-fpm-Use-vrf_id-for-vrf-not-tabled_id.patch
|
||||
0035-fpm-ignore-route-from-default-table.patch
|
||||
0036-Add-support-of-bgp-l3vni-evpn.patch
|
||||
|
Loading…
Reference in New Issue
Block a user