用户空间和内核空间中的空指针取消引用

时间:2016-02-06 09:27:28

标签: linux kernel userspace

如果我们在用户空间和内核空间中取消引用空指针会发生什么?

根据我的理解,行为基于编译器,架构等。

但通常用于分配虚拟内存的每个用户空间程序,并且分页用于使用页表将虚拟地址转换为物理地址。

因此,如果我们在用户空间中取消引用空指针,则该地址无效,因此上下文切换将发生,并且在内核中基于此空指针的中断解除引用'将出现分段错误或页面错误错误'。< / p>

在内核空间:

如果我们取消引用NULL指针,可能会导致系统崩溃,或者内核可能无法从该调用返回。

我的理解是否正确?或任何其他信息缺失意味着请解释。

参考:我从这个“What happens in OS when we dereference a NULL pointer in C?”中了解到了

1 个答案:

答案 0 :(得分:3)

内核将虚拟地址0处的页面映射到没有设置权限位的所有进程。当您尝试访问该页面时,您会收到page fault。处理它的内核例程会向您的进程发出SIGSEGV signal。如果您没有注册SIGSEGV的处理程序,则核心为dumped,您会看到&#34;分段错误&#34;消息。

内核方面,事情有点不同。毕竟,内核应该是健壮的:

  • 如果取消引用并且可以恢复(例如,您的触控板驱动程序执行了攻击),则会生成kernel oops。内核继续运行(现在)。
  • 如果取消引用以便无法恢复,则Oops会导致kernel panic。需要重新启动。
  • 如果由于某种原因,在第0页映射了数据,则会损坏内存。这可能导致恐慌,不被注意甚至是abused for a privilege escalation attack