From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DA7C5C7618A for ; Mon, 20 Mar 2023 00:59:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230473AbjCTA7S (ORCPT ); Sun, 19 Mar 2023 20:59:18 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60826 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229981AbjCTA6D (ORCPT ); Sun, 19 Mar 2023 20:58:03 -0400 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EB5CD1E1D5; Sun, 19 Mar 2023 17:55:34 -0700 (PDT) Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id CCE7D61152; Mon, 20 Mar 2023 00:55:34 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 7ECDEC433EF; Mon, 20 Mar 2023 00:55:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1679273734; bh=3vjNKBsYhlaRuIIxf3lOjTIlfnngJaoH3K2oWZHOTRY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=hLl1AxUl2hqTrbGx8c0uDqG0hJLRSnqvFojokJFTCIU4yMWLe6GFEI3h+5CWSCEJQ XCyDrRzKM6K45cGmSGVrC4gWR40WblrAND/st/OI9J1DvQeSFViJ+rpCZ8Y1Sou/dD MEulbyV1R6jVOaxxdXPT37tsNdCeI1PuJnjXoAbg33I3w3/QZHfOuRXDWxZlT9hwwm 8FekJ/+2+k0Hu469fUrJ1U3Bozrxyk1+FUByn+va8wPqkFkYUA87E7piau9KPQWOja 0uTUaDo9V0uusSJANi91tMnY65YPKF5bJJgdErpcXH5OoiY6qnpxMupqINMY3IBS66 WE9QmBAQQqQfw== From: Sasha Levin To: linux-kernel@vger.kernel.org, stable@vger.kernel.org Cc: Michael Schmitz , Eero Tamminen , Geert Uytterhoeven , Sasha Levin , laurent@vivier.eu, linux-m68k@lists.linux-m68k.org Subject: [PATCH AUTOSEL 5.15 06/17] m68k: Only force 030 bus error if PC not in exception table Date: Sun, 19 Mar 2023 20:55:08 -0400 Message-Id: <20230320005521.1428820-6-sashal@kernel.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230320005521.1428820-1-sashal@kernel.org> References: <20230320005521.1428820-1-sashal@kernel.org> MIME-Version: 1.0 X-stable: review X-Patchwork-Hint: Ignore Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Michael Schmitz [ Upstream commit e36a82bebbf7da814530d5a179bef9df5934b717 ] __get_kernel_nofault() does copy data in supervisor mode when forcing a task backtrace log through /proc/sysrq_trigger. This is expected cause a bus error exception on e.g. NULL pointer dereferencing when logging a kernel task has no workqueue associated. This bus error ought to be ignored. Our 030 bus error handler is ill equipped to deal with this: Whenever ssw indicates a kernel mode access on a data fault, we don't even attempt to handle the fault and instead always send a SEGV signal (or panic). As a result, the check for exception handling at the fault PC (buried in send_sig_fault() which gets called from do_page_fault() eventually) is never used. In contrast, both 040 and 060 access error handlers do not care whether a fault happened on supervisor mode access, and will call do_page_fault() on those, ultimately honoring the exception table. Add a check in bus_error030 to call do_page_fault() in case we do have an entry for the fault PC in our exception table. I had attempted a fix for this earlier in 2019 that did rely on testing pagefault_disabled() (see link below) to achieve the same thing, but this patch should be more generic. Tested on 030 Atari Falcon. Reported-by: Eero Tamminen Link: https://lore.kernel.org/r/alpine.LNX.2.21.1904091023540.25@nippy.intranet Link: https://lore.kernel.org/r/63130691-1984-c423-c1f2-73bfd8d3dcd3@gmail.com Signed-off-by: Michael Schmitz Reviewed-by: Geert Uytterhoeven Link: https://lore.kernel.org/r/20230301021107.26307-1-schmitzmic@gmail.com Signed-off-by: Geert Uytterhoeven Signed-off-by: Sasha Levin --- arch/m68k/kernel/traps.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/arch/m68k/kernel/traps.c b/arch/m68k/kernel/traps.c index 59fc63feb0dcc..6f647742a6ca9 100644 --- a/arch/m68k/kernel/traps.c +++ b/arch/m68k/kernel/traps.c @@ -30,6 +30,7 @@ #include #include #include +#include #include #include @@ -544,7 +545,8 @@ static inline void bus_error030 (struct frame *fp) errorcode |= 2; if (mmusr & (MMU_I | MMU_WP)) { - if (ssw & 4) { + /* We might have an exception table for this PC */ + if (ssw & 4 && !search_exception_tables(fp->ptregs.pc)) { pr_err("Data %s fault at %#010lx in %s (pc=%#lx)\n", ssw & RW ? "read" : "write", fp->un.fmtb.daddr, -- 2.39.2