linux是怎么做到禁止内核直接访问用户空间的?
大佬们帮我解答一下这个情景
情景:驱动中直接使用三环指针访问内存的话会导致系统崩溃,只能用 copy_from_user 等系统调用来拷贝用户空间的内存到内核中。
查了下 copy_from_user 相关的资料,其在执行拷贝数据之前,检查了3环指针有没有超出用户空间等等。
我的理解:为了内核安全,在内核访问用户空间的内存时必须要校验指针的合法性。
但是我的疑问是,linux是怎么做到禁止内核直接访问用户空间的?
因为我看 copy_from_user 的代码也只是检查了指针合法性而已,我没看到做了什么操作,而它就可以拷贝,直接使用指针读取就不行。
查了些资料,cr0寄存器中有个wp位倒是可以限制内核对用户空间中只读的内存进行写操作。但是还是不能解释 copy_from_user 是怎么可以拷贝数据的。
所以请求各位懂这方面的大佬帮忙解答解答,谢谢!