linux是怎么做到禁止内核直接访问用户空间的?

Debugger_floyd 2020-04-14 05:33:59
大佬们帮我解答一下这个情景
情景:驱动中直接使用三环指针访问内存的话会导致系统崩溃,只能用 copy_from_user 等系统调用来拷贝用户空间的内存到内核中。
查了下 copy_from_user 相关的资料,其在执行拷贝数据之前,检查了3环指针有没有超出用户空间等等。
我的理解:为了内核安全,在内核访问用户空间的内存时必须要校验指针的合法性。

但是我的疑问是,linux是怎么做到禁止内核直接访问用户空间的?
因为我看 copy_from_user 的代码也只是检查了指针合法性而已,我没看到做了什么操作,而它就可以拷贝,直接使用指针读取就不行。

查了些资料,cr0寄存器中有个wp位倒是可以限制内核对用户空间中只读的内存进行写操作。但是还是不能解释 copy_from_user 是怎么可以拷贝数据的。

所以请求各位懂这方面的大佬帮忙解答解答,谢谢!
...全文
96 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

4,441

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 内核源代码研究区
社区管理员
  • 内核源代码研究区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧