sha*_*kar 24 linux kernel linux-kernel
我想知道当内核运行故障处理程序以引入用户页面时,是否在功能上错误地对用户空间地址进行页面错误.
操作系统是Linux 2.6.30
假设任务的两个用户地址都有效(落在vma,rw权限范围内).
当我检查内核代码时,如果故障地址有效并且故障没有发生在原子上下文或irq处理程序中,我发现内核不介意嵌套故障.
(我不认为答案是cpu特定的,但我想补充一点,我对arm和mips感兴趣).
例如:如果我从页面错误处理程序打印堆栈数据,则可能发生这种情况.
查看过去一小时的内核源代码表明它没有问题:struct vm_operations_struct的定义和handle_mm_fault()之间的代码以及__do_fault()中对 vma->vm_ops->fault 的调用都没有任何关于此的警告声明,并且我看过的几个 -> 故障处理程序似乎也不担心它......
...我认为主要的是,您需要避免通过再次在同一地址上出错而陷入无限递归,但这可能只有在内核堆栈位于您的vma 中时才会发生,而这很可能不会发生发生?