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 <sokolmish@gmail.com> Change-Id: I0d705f1f139c4083af75066aeb525964ed0aa202
This commit is contained in:
@ -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...) \
|
||||
|
Reference in New Issue
Block a user