forked from sonic-net/sonic-buildimage
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[FRR] Fix zebra memory leak when bgp fib suppress pending is enabled (s…
…onic-net#17484) (sonic-net#17977) 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.
- Loading branch information
1 parent
e676ad1
commit 27b05dd
Showing
2 changed files
with
58 additions
and
0 deletions.
There are no files selected for viewing
57 changes: 57 additions & 0 deletions
57
src/sonic-frr/patch/0033-zebra-The-dplane_fpm_nl-return-path-leaks-memory.patch
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -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 | ||
|
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters