From d0016e1999da04f76326f6153d95dc248d09e4cd Mon Sep 17 00:00:00 2001 From: Donatas Abraitis Date: Thu, 24 Mar 2022 12:00:57 +0200 Subject: [PATCH] bgpd: Turn off thread when running `no bmp targets X` Avoid use-after-free and prevent from crashing: ``` (gdb) bt 0 raise (sig=) at ../sysdeps/unix/sysv/linux/raise.c:50 1 0x00007f2a15c2c30d in core_handler (signo=11, siginfo=0x7fffb915e630, context=) at lib/sigevent.c:261 2 3 0x00007f2a156201e4 in bmp_stats (thread=) at bgpd/bgp_bmp.c:1330 4 0x00007f2a15c3d553 in thread_call (thread=thread@entry=0x7fffb915ebf0) at lib/thread.c:2001 5 0x00007f2a15bfa570 in frr_run (master=0x55c43a393ae0) at lib/libfrr.c:1196 6 0x000055c43930627c in main (argc=, argv=) at bgpd/bgp_main.c:519 (gdb) ``` Signed-off-by: Donatas Abraitis (cherry picked from commit 4008aa1a24f8175831e2b4917555aaa71d5ebddd) --- bgpd/bgp_bmp.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bgpd/bgp_bmp.c b/bgpd/bgp_bmp.c index 1c9852f5c2..7e9e527eb0 100644 --- a/bgpd/bgp_bmp.c +++ b/bgpd/bgp_bmp.c @@ -1623,6 +1623,8 @@ static void bmp_targets_put(struct bmp_targets *bt) struct bmp *bmp; struct bmp_active *ba; + THREAD_OFF(bt->t_stats); + frr_each_safe (bmp_actives, &bt->actives, ba) bmp_active_put(ba); -- 2.39.5