原理上,内核态是可以直接访问用户态的虚拟地址空间的,所以如果需要在内核态获取用户态地址空间的数据的话,理论上应该是可以直接访问的,但为什么还需要使用copy_from_user接口呢?
因为:直接访问的话,无法保证被访问的用户态虚拟地址是否有对应的页表项,即无法保证该虚拟地址已经分配了相应的物理内存,如果此时没有对应的页表项,那么此时将产生page fault,导致流程混乱,原则上如果没有页表项(即没有物理内存时),是不应该对齐进行操作的。
所以直接操作有比较大的风险,而copy_from_user本质上也只是做了相关判断和校验,保证不会出现相关异常而已。
阅读(3528) | 评论(0) | 转发(4) |