From: Donatas Abraitis Date: Thu, 24 Mar 2022 10:00:57 +0000 (+0200) Subject: bgpd: Turn off thread when running `no bmp targets X` X-Git-Tag: pim6-testing-20220430~164^2 X-Git-Url: https://git.puffer.fish/?a=commitdiff_plain;h=4008aa1a24f8175831e2b4917555aaa71d5ebddd;p=matthieu%2Ffrr.git 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 --- diff --git a/bgpd/bgp_bmp.c b/bgpd/bgp_bmp.c index 96c34f9196..39158f0147 100644 --- a/bgpd/bgp_bmp.c +++ b/bgpd/bgp_bmp.c @@ -1619,6 +1619,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);