On Mon, 2012-02-20 at 03:47 -0800, tip-bot for Steven Rostedt wrote: > Commit-ID: 45d5a1683c04be28abdf5c04c27b1417e0374486 > Gitweb: http://git.kernel.org/tip/45d5a1683c04be28abdf5c04c27b1417e0374486 > Author: Steven Rostedt <rostedt@xxxxxxxxxxx> > AuthorDate: Sun, 19 Feb 2012 16:43:37 -0500 > Committer: Ingo Molnar <mingo@xxxxxxx> > CommitDate: Mon, 20 Feb 2012 09:09:57 +0100 > > x86/nmi: Test saved %cs in NMI to determine nested NMI case > > Currently, the NMI handler tests if it is nested by checking the > special variable saved on the stack (set during NMI handling) > and whether the saved stack is the NMI stack as well (to prevent > the race when the variable is set to zero). > > But userspace may set their %rsp to any value as long as they do > not derefence it, and it may make it point to the NMI stack, > which will prevent NMIs from triggering while the userspace app > is running. (I tested this, and it is indeed the case) > > Add another check to determine nested NMIs by looking at the > saved %cs (code segment register) and making sure that it is the > kernel code segment. > > Signed-off-by: Steven Rostedt <rostedt@xxxxxxxxxxx> > Cc: H. Peter Anvin <hpa@xxxxxxxxx> > Cc: Peter Zijlstra <a.p.zijlstra@xxxxxxxxx> > Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > Cc: <stable@xxxxxxxxxx> Just so that we do not confuse Greg, the bug was introduced in the 3.3 merge window. It does not exist in 3.2 or earlier. -- Steve > Link: http://lkml.kernel.org/r/1329687817.1561.27.camel@xxxxxxxxxxxxxxx > Signed-off-by: Ingo Molnar <mingo@xxxxxxx> > --- > arch/x86/kernel/entry_64.S | 7 +++++++ > 1 files changed, 7 insertions(+), 0 deletions(-) > > diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S > index 3fe8239..debd851 100644 > --- a/arch/x86/kernel/entry_64.S > +++ b/arch/x86/kernel/entry_64.S > @@ -1532,6 +1532,13 @@ ENTRY(nmi) > pushq_cfi %rdx > > /* > + * If %cs was not the kernel segment, then the NMI triggered in user > + * space, which means it is definitely not nested. > + */ > + cmp $__KERNEL_CS, 16(%rsp) > + jne first_nmi > + > + /* > * Check the special variable on the stack to see if NMIs are > * executing. > */ -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html