【问题标题】:During a sys call, who checks if the address is writable在系统调用期间,谁检查地址是否可写
【发布时间】:2015-07-21 04:35:37
【问题描述】:

因此,考虑一个返回结构的系统调用(如gettimeofday)。

现在,我进行以下调用

gettimeoftheday(&time, NULL)

现在,当调用 sys 调用时,我知道内核会检查是否为 syscall 传递了正确的参数。但是在这种情况下,检查指针time是否可写是内核的工作吗?

【问题讨论】:

  • 这会像在任何其他情况下一样触发 seg-fault,对吧?

标签: c memory kernel system system-calls


【解决方案1】:

“内核的工作”是什么意思?

考虑一段恶意代码试图破坏内核,传递内核中某物的地址。如果内核没有适当的机制,它会破坏它自己的状态。此外,地址可能完全无效。

简而言之,当然内核必须检查它。在 linux 中,他们使用 access_ok() 进行范围检查,并具有单独的 __put_user / __get_user(和其他)原语来实际访问内容 - 如果无法读取/写入,这些将失败。

【讨论】:

  • 这记录在手册页中:失败时gettimeofday() 应返回-1,唯一记录在案的失败原因是:[EFAULT] An argument address referenced invalid memory.
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-05
  • 1970-01-01
  • 2011-04-19
  • 2016-02-03
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多