copy_from_user(): 内核态可以访问该地址的,否则为啥可以memcpy。只是说内核态访问的时候,无法保证用户态的地址(虚拟)有对应的物理地址映射。所以先做校验,如果校验地址成功,则做memcpy,否则只是做memset。这样做的目的是防止内核态segement fault。否则问题就大了。可以参考如下链接,我觉得讲的不错。
在论坛里问了一下,copy_from_user一方面是权限的问题(检查是否越界),另一方面是处理缺页异常,要求...
copy_to_user, copy_from_user这两个函数就是内核代码访问用户空间数据的函数. 但是内核不能直接通过像...
问题就在于检查数据太麻烦,或者根本没办法确保。所以偷懒的方式是先把应用层数据拷贝到系统缓存,再给内核和驱动模块使用。这是效率最低的方式,但是最安全。 此外还有一种,我们都知道内存地址只是虚拟地址,真正的内容都在物理地址上。所以可以做一次映射,既不用复制内容,又可以保证内核的安全。Windows中用MDL很容易实现...
copy 只保证最后被使用的数据是被验证的数据,至于有没有 race 去破坏被传入的数据本身的正确性不在...