From patchwork Fri Jan 6 19:38:59 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Liam R. Howlett" X-Patchwork-Id: 712123 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming@ozlabs.org Delivered-To: patchwork-incoming@ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 3twFH93NcGz9sCg for ; Sat, 7 Jan 2017 06:39:17 +1100 (AEDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755121AbdAFTjQ (ORCPT ); Fri, 6 Jan 2017 14:39:16 -0500 Received: from aserp1040.oracle.com ([141.146.126.69]:48045 "EHLO aserp1040.oracle.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752936AbdAFTjP (ORCPT ); Fri, 6 Jan 2017 14:39:15 -0500 Received: from aserv0022.oracle.com (aserv0022.oracle.com [141.146.126.234]) by aserp1040.oracle.com (Sentrion-MTA-4.3.2/Sentrion-MTA-4.3.2) with ESMTP id v06JdDp7019742 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 6 Jan 2017 19:39:13 GMT Received: from aserv0122.oracle.com (aserv0122.oracle.com [141.146.126.236]) by aserv0022.oracle.com (8.14.4/8.14.4) with ESMTP id v06JdDDK015027 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 6 Jan 2017 19:39:13 GMT Received: from abhmp0011.oracle.com (abhmp0011.oracle.com [141.146.116.17]) by aserv0122.oracle.com (8.14.4/8.14.4) with ESMTP id v06JdCd2017217; Fri, 6 Jan 2017 19:39:12 GMT Received: from heffner.jebus.ca (/24.246.5.213) by default (Oracle Beehive Gateway v4.0) with ESMTP ; Fri, 06 Jan 2017 11:39:12 -0800 From: "Liam R. Howlett" To: sparclinux@vger.kernel.org Cc: davem@davemloft.net Subject: [PATCH 1/2] sparc64: Don't panic on user mode non-resumable errors Date: Fri, 6 Jan 2017 14:38:59 -0500 Message-Id: <1483731540-8055-2-git-send-email-Liam.Howlett@Oracle.com> X-Mailer: git-send-email 2.1.4 In-Reply-To: <1483731540-8055-1-git-send-email-Liam.Howlett@Oracle.com> References: <1483731540-8055-1-git-send-email-Liam.Howlett@Oracle.com> X-Source-IP: aserv0022.oracle.com [141.146.126.234] Sender: sparclinux-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: sparclinux@vger.kernel.org Send a SIGBUS to the offending process on all userspace non-resumable traps. This prevents userspace applications from creating a kernel panic. The siginfo will return the code BUS_ADRERR and a valid address if possible. Signed-off-by: Liam R. Howlett --- arch/sparc/kernel/traps_64.c | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/arch/sparc/kernel/traps_64.c b/arch/sparc/kernel/traps_64.c index 496fa92..3a0c153 100644 --- a/arch/sparc/kernel/traps_64.c +++ b/arch/sparc/kernel/traps_64.c @@ -2075,6 +2075,27 @@ void sun4v_nonresum_error(struct pt_regs *regs, unsigned long offset) put_cpu(); + if (!(regs->tstate & TSTATE_PRIV)) { + /* DON'T PANIC. This error was from userspace. */ + siginfo_t info; + unsigned int insn; + + info.si_signo = SIGBUS; + info.si_code = BUS_ADRERR; + info.si_errno = 0; + info.si_trapno = 0; + info.si_addr = 0; + + if (!copy_from_user(&insn, (void __user *)regs->tpc, 4)) { + info.si_addr = (void __user *) + compute_effective_address(regs, insn, + (insn >> 25) & 0x1f); + } + + force_sig_info(SIGBUS, &info, current); + return; + } + #ifdef CONFIG_PCI /* Check for the special PCI poke sequence. */ if (pci_poke_in_progress && pci_poke_cpu == cpu) {