From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932909AbcGOMCY (ORCPT ); Fri, 15 Jul 2016 08:02:24 -0400 Received: from terminus.zytor.com ([198.137.202.10]:55858 "EHLO terminus.zytor.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932565AbcGOMCV (ORCPT ); Fri, 15 Jul 2016 08:02:21 -0400 Date: Fri, 15 Jul 2016 05:01:25 -0700 From: tip-bot for Andy Lutomirski Message-ID: Cc: brgerst@gmail.com, luto@kernel.org, linux-kernel@vger.kernel.org, bp@alien8.de, tglx@linutronix.de, torvalds@linux-foundation.org, dvlasenk@redhat.com, mingo@kernel.org, peterz@infradead.org, jpoimboe@redhat.com, hpa@zytor.com Reply-To: bp@alien8.de, tglx@linutronix.de, linux-kernel@vger.kernel.org, brgerst@gmail.com, luto@kernel.org, mingo@kernel.org, dvlasenk@redhat.com, peterz@infradead.org, hpa@zytor.com, jpoimboe@redhat.com, torvalds@linux-foundation.org In-Reply-To: References: To: linux-tip-commits@vger.kernel.org Subject: [tip:x86/mm] x86/dumpstack/64: Handle faults when printing the "Stack: " part of an OOPS Git-Commit-ID: 98f30b1207932b6553ea605c99393d8afca12324 X-Mailer: tip-git-log-daemon Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Content-Type: text/plain; charset=UTF-8 Content-Disposition: inline Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Commit-ID: 98f30b1207932b6553ea605c99393d8afca12324 Gitweb: http://git.kernel.org/tip/98f30b1207932b6553ea605c99393d8afca12324 Author: Andy Lutomirski AuthorDate: Thu, 14 Jul 2016 13:22:53 -0700 Committer: Ingo Molnar CommitDate: Fri, 15 Jul 2016 10:26:27 +0200 x86/dumpstack/64: Handle faults when printing the "Stack: " part of an OOPS If we overflow the stack into a guard page, we'll recursively fault when trying to dump the contents of the guard page. Use probe_kernel_address() so we can recover if this happens. Signed-off-by: Andy Lutomirski Reviewed-by: Josh Poimboeuf Cc: Borislav Petkov Cc: Brian Gerst Cc: Denys Vlasenko Cc: H. Peter Anvin Cc: Linus Torvalds Cc: Peter Zijlstra Cc: Thomas Gleixner Link: http://lkml.kernel.org/r/e626d47a55d7b04dcb1b4d33faa95e8505b217c8.1468527351.git.luto@kernel.org Signed-off-by: Ingo Molnar --- arch/x86/kernel/dumpstack_64.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/arch/x86/kernel/dumpstack_64.c b/arch/x86/kernel/dumpstack_64.c index d558a8a..2552a1e 100644 --- a/arch/x86/kernel/dumpstack_64.c +++ b/arch/x86/kernel/dumpstack_64.c @@ -272,6 +272,8 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, stack = sp; for (i = 0; i < kstack_depth_to_print; i++) { + unsigned long word; + if (stack >= irq_stack && stack <= irq_stack_end) { if (stack == irq_stack_end) { stack = (unsigned long *) (irq_stack_end[-1]); @@ -281,12 +283,18 @@ show_stack_log_lvl(struct task_struct *task, struct pt_regs *regs, if (kstack_end(stack)) break; } + + if (probe_kernel_address(stack, word)) + break; + if ((i % STACKSLOTS_PER_LINE) == 0) { if (i != 0) pr_cont("\n"); - printk("%s %016lx", log_lvl, *stack++); + printk("%s %016lx", log_lvl, word); } else - pr_cont(" %016lx", *stack++); + pr_cont(" %016lx", word); + + stack++; touch_nmi_watchdog(); } preempt_enable();