exception¶
内核空指针访问一定会panic 吗¶
不一定会 , 在一般上下文中, 直接访问空指针,执行完oops_end 就会直接退出(虚拟机环境):
async_page_fault —> __do_page_fault —> no_context —> oops_end —> do_exit 让当前进程退出
如果在中断上下文中访问空指针,则会进入panic, 区别就在oops_end 代码中
void oops_end(unsigned long flags, struct pt_regs *regs, int signr)
{
if (regs && kexec_should_crash(current))
crash_kexec(regs); //kdump xxx
if (!signr)
return;
if (in_interrupt()) // 如果是中断上下文,则触发panic
panic("Fatal exception in interrupt");
if (panic_on_oops) // 如果在异常上下文也会
panic("Fatal exception");
kasan_unpoison_task_stack(current);
rewind_stack_do_exit(signr); // 准备调用do_exit
}
NOKPROBE_SYMBOL(oops_end);