From mboxrd@z Thu Jan 1 00:00:00 1970 From: Andy Lutomirski Subject: [PATCH v4 10/16] x86/die: Don't try to recover from an OOPS on a non-default stack Date: Thu, 23 Jun 2016 21:23:05 -0700 Message-ID: <66fc0e6c5a47a0bb8e96c340908067c72a027acc.1466741835.git.luto@kernel.org> References: Reply-To: kernel-hardening@lists.openwall.com Return-path: List-Post: List-Help: List-Unsubscribe: List-Subscribe: In-Reply-To: In-Reply-To: References: To: x86@kernel.org, linux-kernel@vger.kernel.org Cc: linux-arch@vger.kernel.org, Borislav Petkov , Nadav Amit , Kees Cook , Brian Gerst , "kernel-hardening@lists.openwall.com" , Linus Torvalds , Josh Poimboeuf , Jann Horn , Heiko Carstens , Andy Lutomirski List-Id: linux-arch.vger.kernel.org It's not going to work, because the scheduler will explode if we try to schedule when running on an IST stack or similar. This will matter when we let kernel stack overflows (which are #DF) call die(). Signed-off-by: Andy Lutomirski --- arch/x86/kernel/dumpstack.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c index d6209f3a69cb..70d5aae8b8f7 100644 --- a/arch/x86/kernel/dumpstack.c +++ b/arch/x86/kernel/dumpstack.c @@ -245,6 +245,9 @@ void oops_end(unsigned long flags, struct pt_regs *regs, int signr) return; if (in_interrupt()) panic("Fatal exception in interrupt"); + if (((current_stack_pointer() ^ (current_top_of_stack() - 1)) + & ~(THREAD_SIZE - 1)) != 0) + panic("Fatal exception on special stack"); if (panic_on_oops) panic("Fatal exception"); do_exit(signr); -- 2.5.5 From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail.kernel.org ([198.145.29.136]:43726 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751744AbcFXEXa (ORCPT ); Fri, 24 Jun 2016 00:23:30 -0400 From: Andy Lutomirski Subject: [PATCH v4 10/16] x86/die: Don't try to recover from an OOPS on a non-default stack Date: Thu, 23 Jun 2016 21:23:05 -0700 Message-ID: <66fc0e6c5a47a0bb8e96c340908067c72a027acc.1466741835.git.luto@kernel.org> In-Reply-To: References: In-Reply-To: References: Sender: linux-arch-owner@vger.kernel.org List-ID: To: x86@kernel.org, linux-kernel@vger.kernel.org Cc: linux-arch@vger.kernel.org, Borislav Petkov , Nadav Amit , Kees Cook , Brian Gerst , "kernel-hardening@lists.openwall.com" , Linus Torvalds , Josh Poimboeuf , Jann Horn , Heiko Carstens , Andy Lutomirski Message-ID: <20160624042305.0FXLqq78ZPjaAi2DbwKbaqlp-YKc4AgR8GUcKwbvv8w@z> It's not going to work, because the scheduler will explode if we try to schedule when running on an IST stack or similar. This will matter when we let kernel stack overflows (which are #DF) call die(). Signed-off-by: Andy Lutomirski --- arch/x86/kernel/dumpstack.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/arch/x86/kernel/dumpstack.c b/arch/x86/kernel/dumpstack.c index d6209f3a69cb..70d5aae8b8f7 100644 --- a/arch/x86/kernel/dumpstack.c +++ b/arch/x86/kernel/dumpstack.c @@ -245,6 +245,9 @@ void oops_end(unsigned long flags, struct pt_regs *regs, int signr) return; if (in_interrupt()) panic("Fatal exception in interrupt"); + if (((current_stack_pointer() ^ (current_top_of_stack() - 1)) + & ~(THREAD_SIZE - 1)) != 0) + panic("Fatal exception on special stack"); if (panic_on_oops) panic("Fatal exception"); do_exit(signr); -- 2.5.5