gpt4 book ai didi

linux-kernel - 为什么需要 copy_to/from_user?

转载 作者:行者123 更新时间:2023-12-04 05:28:48 24 4
gpt4 key购买 nike

根据 x86 和 ppc 上的 linux 设计,4g 虚拟地址空间被划分为 3:1。
用户虚拟地址直到 3g。

现在,如果用户应用程序执行 ioctl 传递指向缓冲区的指针,内核模块可以直接执行 memcpy,我尝试过并且它有效。
=> 为什么我们需要一个 copy_to/copy_from 用户。

注意:如果页面被换出,那么内核页面错误处理程序会将其恢复,并且它对内核模块是不可见的。

需要你的想法...评论

最佳答案

copy_to_user 有几个很好的理由/copy_from_user是要使用的正确功能:

  • 在某些架构上,一个简单的 memcpy()不起作用,因此使用这些函数可以让您的代码在那里工作。我相信即使 x86 带有 HIGHMEM选择的配置选项在这艘船上。
  • 这些函数执行 access_ok()检查以确保引用的用户空间地址确实是真正的用户空间地址。如果你只是做一个memcpy()ioctl() 的调用者可以提供与内核地址重叠的地址范围,这是一个安全漏洞。
  • 但是,主要原因是正确处理不良用户地址。如果您只使用裸机 memcpy() ,未处理的故障将导致内核 oops。用户访问功能使用 "fixup" mechanism ,它允许处理故障(读取或写入很短,通常 EFAULT 在这种情况下返回到用户空间)。
  • 关于linux-kernel - 为什么需要 copy_to/from_user?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4130915/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com