From 8309517f23b314e588bf3ad623250f1440908bd3 Mon Sep 17 00:00:00 2001 From: Mikhail Sokolovskiy Date: Thu, 30 Mar 2023 13:27:33 +0300 Subject: vlib: fix segfault on panic in worker Vlib panic uses longjmp to exit main loop, but workers don't set main_loop_exit field on initialization, so this jump corrupts registers and causes segfault. There I add clib_warning and abort if longjmp context hasn't been set. Type: fix Signed-off-by: Mikhail Sokolovskiy Change-Id: I0d705f1f139c4083af75066aeb525964ed0aa202 --- src/vlib/main.h | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/vlib/main.h b/src/vlib/main.h index a9cfab4f841..94b8c4fa954 100644 --- a/src/vlib/main.h +++ b/src/vlib/main.h @@ -377,7 +377,13 @@ always_inline void vlib_panic_with_error (vlib_main_t * vm, clib_error_t * error) { vm->main_loop_error = error; - clib_longjmp (&vm->main_loop_exit, VLIB_MAIN_LOOP_EXIT_PANIC); + if (vm->main_loop_exit_set) + clib_longjmp (&vm->main_loop_exit, VLIB_MAIN_LOOP_EXIT_PANIC); + else + { + clib_warning ("panic: %U", format_clib_error, error); + abort (); + } } #define vlib_panic_with_msg(vm,args...) \ -- cgit 1.2.3-korg