From e235185279e84dd3e0feb48145ceb3d8a83c1323 Mon Sep 17 00:00:00 2001 From: Donald Sharp Date: Wed, 30 Nov 2022 11:49:51 -0500 Subject: [PATCH] bgpd: Peer events should be cleaned up on shutdown Currently bgp does not stop any events that are on the thread system for execution on peer deletion. This is not good. Stop those events and prevent use after free's. Signed-off-by: Donald Sharp --- bgpd/bgpd.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bgpd/bgpd.c b/bgpd/bgpd.c index e83ea2b460..992306773b 100644 --- a/bgpd/bgpd.c +++ b/bgpd/bgpd.c @@ -1127,6 +1127,7 @@ static void peer_free(struct peer *peer) bgp_timer_set(peer); bgp_reads_off(peer); bgp_writes_off(peer); + thread_cancel_event_ready(bm->master, peer); FOREACH_AFI_SAFI (afi, safi) THREAD_OFF(peer->t_revalidate_all[afi][safi]); assert(!peer->t_write); @@ -2492,6 +2493,7 @@ int peer_delete(struct peer *peer) bgp_keepalives_off(peer); bgp_reads_off(peer); bgp_writes_off(peer); + thread_cancel_event_ready(bm->master, peer); FOREACH_AFI_SAFI (afi, safi) THREAD_OFF(peer->t_revalidate_all[afi][safi]); assert(!CHECK_FLAG(peer->thread_flags, PEER_THREAD_WRITES_ON)); -- 2.39.5