Skip to content

Commit

Permalink
[FRR] Fix zebra memory leak when bgp fib suppress pending is enabled (#…
Browse files Browse the repository at this point in the history
…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.
  • Loading branch information
dgsudharsan authored and mssonicbld committed Dec 15, 2023
1 parent bed8d24 commit 8297800
Show file tree
Hide file tree
Showing 2 changed files with 58 additions and 0 deletions.
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

1 change: 1 addition & 0 deletions src/sonic-frr/patch/series
Original file line number Diff line number Diff line change
Expand Up @@ -32,3 +32,4 @@ 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

0 comments on commit 8297800

Please sign in to comment.