为什么系统调用参数被内核复制?

时间:2015-01-29 08:06:52

标签: kernel

为什么内核复制系统从用户空间调用参数到内核空间?

为什么内核不能直接从用户堆栈访问系统调用参数?

2 个答案:

答案 0 :(得分:1)

如果参数在用户空间内存中分配,则系统调用将参数复制到内核内存。其原因是安全性和可靠性。

假设内核没有自己创建在用户空间内存中分配的参数副本。这意味着可能会在系统调用的中间修改存在于用户空间内存中的数据。这不利于安全性和可靠性。为了防止这种情况发生,内核会立即将用户空间参数复制到内核内存中。用户空间无法访问内核内存。

内核具有无限的功能来执行任何操作,因此系统调用将执行检查以确保传入的参数是“安全的”#34;而不是恶意的。但是,如果内核没有自己制作安全副本,那么理论上,一个用户空间程序可以在内核检查之后突然进入,修改内存,并操纵内核做坏事,不安全和不可靠的事情。

答案 1 :(得分:0)

因为内核空间堆栈与用户空间堆栈不同。将控制权从用户空间转移到内核空间的代码理解这一点。它通过复制事物来隐藏以下代码的复杂性。如果变量保留在用户空间中,那么所有其他内核代码也需要“理解”这一点 - 在用户空间栈中可以找到这样的变量,而在内核中可以找到其他变量。堆。