Messages in this thread | | | From | Lai Jiangshan <> | Subject | [RFC PATCH 0/4] x86/entry/nmi: solidify userspace NMI entry | Date | Tue, 1 Jun 2021 14:52:13 +0800 |
| |
From: Lai Jiangshan <laijs@linux.alibaba.com>
Current kernel has no code to enforce data breakpoint not on the thread stack. If there is any data breakpoint on the top area of the thread stack, there might be problem.
For example, when NMI hits on userspace in this setting, the code copies the exception frame from the NMI stack to the thread stack and it will cause #DB and after #DB is handled, the not yet copied portion on the NMI stack is in danger of corruption because the NMI is unmasked.
The similar problem happens when #DB hits on userspace with data breakpoint on the thread stack. We will also fix it for #DB when we agree on the problem on NMI and the way to fix it.
The way to fix for NMI is to switch to the entry stack before switching to the thread stack. It also paves the path to use idtentry_body macro for NMI since the huge refactor on entry code made idtentry macros really low level.
Lai Jiangshan (4): x86/entry/nmi: Switch to the entry stack before switching to the thread stack x86/entry/nmi: Use normal idtentry macro for NMI from userspace x86/entry: Remove parameter rdx from macro PUSH_AND_CLEAR_REGS and PUSH_REGS x86/entry/nmi: unmask NMIs on userspace NMI when entry debugging
Cc: Steven Rostedt (VMware) <rostedt@goodmis.org> Cc: Andy Lutomirski <luto@kernel.org>, Cc: Thomas Gleixner <tglx@linutronix.de>, Cc: Ingo Molnar <mingo@redhat.com>, Cc: Borislav Petkov <bp@alien8.de>, Cc: x86@kernel.org, Cc: "H. Peter Anvin" <hpa@zytor.com>
arch/x86/entry/calling.h | 8 ++-- arch/x86/entry/entry_64.S | 82 +++++++++++++++++------------------ arch/x86/kernel/asm-offsets.c | 1 + 3 files changed, 44 insertions(+), 47 deletions(-)
-- 2.19.1.6.gb485710b
| |