请不要考虑由于对 panic() 等的调用而导致的系统调用,这实际上应该使系统恐慌。我对通用系统调用更感兴趣,例如Socket、读、写等。如果这样的系统调用确实引起了恐慌,那么这是内核错误吗?我的理解是它应该是一个内核错误。如果传递了错误的参数,那么系统调用应该只是中止而不是使整个系统恐慌。
问问题
1411 次
2 回答
3
奇怪的是,这不是 100% 正确的。
是的,除非内核中存在错误或硬件故障(例如 RAM 芯片损坏),否则非特权用户对系统调用的输入不应引起恐慌。
但是,对于特权用户(例如 root)来说,情况并非如此。考虑一下 write(2) 系统调用,当特权用户(root 是明显的例子)应用到 /dev/mem 时 - 没有什么能阻止你用它覆盖内核内存。
Unix 就是这样 - 如果这是您想要做的,它可以让您轻松上吊自己的绳子的全长 :-)
于 2012-05-17T11:29:23.663 回答
0
当然,内核必须检查系统调用参数、用户权限、资源可用性并处理并发等问题,以便不惜一切代价避免崩溃。底线是一个简单的用户(即使是 root,理想情况下 - 但正如 gby 所提到的,这很困难,因为 root 可以直接访问物理地址空间)无论她多么努力,都不应该使系统崩溃。
于 2012-05-18T03:54:09.117 回答