系统相关
首页 > 系统相关> > Linux内核中的copy_from_user如何在内部工作?

Linux内核中的copy_from_user如何在内部工作?

作者:互联网

copy_from_user()函数究竟如何在内部工作?它是否使用任何缓冲区或是否有任何内存映射,考虑到内核确实有权访问用户内存空间这一事实?

解决方法:

copy_from_user()的实现高度依赖于体系结构.

在x86和x86-64上,它只是直接从用户空间地址读取并写入内核空间地址,同时暂时禁用SMAP(超级用户模式访问保护)(如果已配置).其中棘手的部分是将copy_from_user()代码放入特殊区域,以便页面错误处理程序可以识别其中发生故障的时间. copy_from_user()中发生的内存保护错误不会像任何其他进程上下文代码触发的那样终止进程,或者像在中断上下文中发生的情况一样使内核崩溃 – 它只是恢复执行一个代码路径,它将-EFAULT返回给调用者.

标签:linux,linux-kernel,memory-mapping
来源: https://codeday.me/bug/20190927/1823067.html