I noticed that bgpd leaks memory when it parses a roa-set containing
multiple entries with the same prefix. Such entries are present in the
output rpki-client generates at the moment. To use rpki-client, one
needs to reload bgpd regularly, which parses the config file again,
which leaks memory. This leads to an ever growing bgpd process. With the
current roa-set, it grows about 1MB per reload. The issue seems to exist
in 6.7 and 6.8.
A minimal sample config to reproduce the issue looks like this:
AS 64500
router-id 10.0.0.1
roa-set {
172.16.0.0/24 source-as 64510
172.16.0.0/24 source-as 64520
}
All items in the tree of prefixes are freed at some point of time. But
items that can not be inserted, because the prefix already exists, are
never freed. I have included a patch which frees such items when the
insertion into the tree fails.
BR, Felix
Index: usr.sbin/bgpd/parse.y
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/parse.y,v
retrieving revision 1.408
diff -u -p -u -p -r1.408 parse.y
--- usr.sbin/bgpd/parse.y 10 May 2020 13:38:46 -0000 1.408
+++ usr.sbin/bgpd/parse.y 25 Oct 2020 12:23:39 -0000
@@ -4513,6 +4513,8 @@ add_roa_set(struct prefixset_item *npsi,
psi = RB_INSERT(prefixset_tree, curpsitree, npsi);
if (psi == NULL)
psi = npsi;
+ else
+ free(npsi);
if (psi->set == NULL)
if ((psi->set = set_new(1, sizeof(rs))) == NULL)