如果我们在用户空间和内核空间中取消引用空指针,将会发生什么?
据我了解,行为是基于编译器,体系结构等的.
但通常对于分配了虚拟内存的每个用户空间程序,使用分页表使用分页将虚拟地址转换为物理地址.
因此,如果我们在用户空间中取消引用空指针,则该地址无效,因此上下文切换将发生,并且在内核中基于此空指针取消引用的中断“将出现分段错误或将出现页面错误”.
在内核空间中:
如果我们取消引用NULL指针,则可能导致系统崩溃或内核可能无法从该调用返回.
我的理解正确吗?或者缺少其他信息,请解释.
解决方法:
内核将虚拟地址0的页面映射到所有未设置许可权位的进程中.当您尝试访问该页面时,您会得到一个page fault.处理该页面的内核例程将SIGSEGV signal发送给您的进程.如果您没有注册SIGSEGV的处理程序,则核心为dumped,并且看到“ Segmentation fault”消息.
内核方面,情况有所不同.毕竟,内核应该是健壮的:
>如果取消引用并且可以恢复(例如,您的触控板驱动程序犯了此罪行),则会生成kernel oops.内核继续运行(目前).
>如果发生取消引用从而无法恢复,那么Oops会导致kernel panic.需要重新引导.
>如果由于某种原因在第0页上映射了数据,则将损坏内存.这可能会导致恐慌,甚至没有引起注意,甚至可能是abused for a privilege escalation attack.
标签:kernel,linux,userspace
来源: https://codeday.me/bug/20191119/2033282.html