From 21337019b00df48121ab9787f7106de1626f0aec Mon Sep 17 00:00:00 2001 From: Andrew Boie Date: Thu, 14 Feb 2019 13:41:31 -0800 Subject: [PATCH] x86: get oops reason code more robustly The code did not consider privilege level stack switches. We have the original stack pointer in the NANO_ESF, just use that. Signed-off-by: Andrew Boie --- arch/x86/core/fatal.c | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/arch/x86/core/fatal.c b/arch/x86/core/fatal.c index 1716efa03f3..6bcc66ff878 100644 --- a/arch/x86/core/fatal.c +++ b/arch/x86/core/fatal.c @@ -229,17 +229,10 @@ FUNC_NORETURN void _arch_syscall_oops(void *ssf_ptr) } #ifdef CONFIG_X86_KERNEL_OOPS -/* The reason code gets pushed onto the stack right before the exception is - * triggered, so it would be after the nano_esf data - */ -struct oops_esf { - NANO_ESF nano_esf; - unsigned int reason; -}; - -FUNC_NORETURN void _do_kernel_oops(const struct oops_esf *esf) +FUNC_NORETURN void _do_kernel_oops(const NANO_ESF *esf) { - _NanoFatalErrorHandler(esf->reason, &esf->nano_esf); + u32_t *stack_ptr = (u32_t *)esf->esp; + _NanoFatalErrorHandler(*stack_ptr, esf); } extern void (*_kernel_oops_handler)(void);