mirror of
https://git.proxmox.com/git/mirror_frr
synced 2025-07-27 13:46:45 +00:00
Merge pull request #14845 from opensourcerouting/fix/bgp_conditional_double_free
bgpd: Prevent USE case for conditional advertisements with `set` actions
This commit is contained in:
commit
b41f7b1b8e
@ -141,8 +141,9 @@ static void bgp_conditional_adv_routes(struct peer *peer, afi_t afi,
|
|||||||
bgp_addpath_id_for_peer(
|
bgp_addpath_id_for_peer(
|
||||||
peer, afi, safi,
|
peer, afi, safi,
|
||||||
&pi->tx_addpath));
|
&pi->tx_addpath));
|
||||||
|
|
||||||
|
bgp_attr_flush(&advmap_attr);
|
||||||
}
|
}
|
||||||
bgp_attr_flush(&advmap_attr);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
UNSET_FLAG(subgrp->sflags, SUBGRP_STATUS_TABLE_REPARSING);
|
UNSET_FLAG(subgrp->sflags, SUBGRP_STATUS_TABLE_REPARSING);
|
||||||
|
@ -36,4 +36,5 @@ route-map exist-map permit 10
|
|||||||
!
|
!
|
||||||
route-map advertise-map permit 10
|
route-map advertise-map permit 10
|
||||||
match ip address prefix-list advertise
|
match ip address prefix-list advertise
|
||||||
|
set community 65000:1
|
||||||
!
|
!
|
||||||
|
@ -54,6 +54,7 @@ def test_bgp_conditional_advertisements_static_route():
|
|||||||
if tgen.routers_have_failure():
|
if tgen.routers_have_failure():
|
||||||
pytest.skip(tgen.errors)
|
pytest.skip(tgen.errors)
|
||||||
|
|
||||||
|
r1 = tgen.gears["r1"]
|
||||||
r2 = tgen.gears["r2"]
|
r2 = tgen.gears["r2"]
|
||||||
|
|
||||||
def _bgp_converge():
|
def _bgp_converge():
|
||||||
@ -112,6 +113,25 @@ def test_bgp_conditional_advertisements_static_route():
|
|||||||
_, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
|
_, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
|
||||||
assert result is None, "10.10.10.2/32 is not advertised after prefix-list update"
|
assert result is None, "10.10.10.2/32 is not advertised after prefix-list update"
|
||||||
|
|
||||||
|
def _bgp_check_received_routes():
|
||||||
|
output = json.loads(r1.vtysh_cmd("show bgp ipv4 unicast 10.10.10.1/32 json"))
|
||||||
|
expected = {
|
||||||
|
"paths": [
|
||||||
|
{
|
||||||
|
"community": {
|
||||||
|
"string": "65000:1",
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
return topotest.json_cmp(output, expected)
|
||||||
|
|
||||||
|
test_func = functools.partial(
|
||||||
|
_bgp_check_received_routes,
|
||||||
|
)
|
||||||
|
_, result = topotest.run_and_expect(test_func, None, count=30, wait=1)
|
||||||
|
assert result is None, "10.10.10.1/32 does not have 65000:1 community attached"
|
||||||
|
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
args = ["-s"] + sys.argv[1:]
|
args = ["-s"] + sys.argv[1:]
|
||||||
|
Loading…
Reference in New Issue
Block a user