Messages in this thread Patch in this message | | | From | Frederic Weisbecker <> | Subject | [RFC PATCH] x86: Barf when faults happen in NMI | Date | Mon, 27 Sep 2010 21:30:33 +0200 |
| |
In x86, faults exit by executing the iret instruction, which then reenables NMIs if we faulted in NMI context. Then if a fault happens in NMI, another NMI can nest after the fault exits.
But we don't yet support nested NMIs because we have only one NMI stack. To prevent that, trigger a bug when a fault happens in NMI context.
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Mathieu Desnoyers <mathieu.desnoyers@efficios.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> ---
I first thought about putting it in the vmalloc fault path only. But then I saw more occasions for the kernel to fault (kmemcheck or so), and so I thought it should be better put in the all in one path. But I suspect you won't like that conditional in the big x86 fault path.
arch/x86/mm/fault.c | 2 ++ 1 files changed, 2 insertions(+), 0 deletions(-)
diff --git a/arch/x86/mm/fault.c b/arch/x86/mm/fault.c index 4c4508e..80c997e 100644 --- a/arch/x86/mm/fault.c +++ b/arch/x86/mm/fault.c @@ -955,6 +955,8 @@ do_page_fault(struct pt_regs *regs, unsigned long error_code) int write; int fault; + BUG_ON(in_nmi()); + tsk = current; mm = tsk->mm; -- 1.6.2.3
| |