Commit daf5f4aba0 for frr
commit daf5f4aba00e1f5242473ba33580418e3f36d8a8
Author: Donatas Abraitis <donatas@opensourcerouting.org>
Date: Wed Oct 7 22:33:15 2026 +0300
bgpd: Flush temporary attr after SRv6 unicast route-map
attr_tmp was only discarded, so anything the route-map's set
clauses allocated (aspath, communities, etc...) leaked
on every evaluation.
Fixes: 1aaf1227805094147ce4b17838f48dba738eef72 ("bgpd: Flush/discard dup'ed attr->extra for deny path in srv6")
Signed-off-by: Donatas Abraitis <donatas@opensourcerouting.org>
diff --git a/bgpd/bgp_srv6.c b/bgpd/bgp_srv6.c
index 4172cb529a..e2d076683b 100644
--- a/bgpd/bgp_srv6.c
+++ b/bgpd/bgp_srv6.c
@@ -342,6 +342,7 @@ void bgp_srv6_unicast_register_route(struct bgp *bgp, afi_t afi, struct bgp_dest
prep_for_rmap_apply(&info, &extra, dest, bpi, bgp->peer_self, NULL,
&attr_tmp);
ret = route_map_apply(rmap, p, &info);
+ bgp_attr_flush(&attr_tmp);
if (ret == RMAP_DENYMATCH) {
if (dest->srv6_unicast)
@@ -350,11 +351,8 @@ void bgp_srv6_unicast_register_route(struct bgp *bgp, afi_t afi, struct bgp_dest
if (BGP_DEBUG(update, UPDATE_OUT))
zlog_debug("srv6 unicast prefix %pBD denied", dest);
- bgp_attr_extra_discard(&attr_tmp);
return;
}
-
- bgp_attr_extra_discard(&attr_tmp);
} else {
zlog_warn("route-map %s was not found, ignored",
bgp->srv6_unicast[afi].rmap_name);