From patchwork Fri Feb 3 00:27:13 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Biggers X-Patchwork-Id: 52232 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:adf:eb09:0:0:0:0:0 with SMTP id s9csp558702wrn; Thu, 2 Feb 2023 16:36:52 -0800 (PST) X-Google-Smtp-Source: AK7set+JmZpGXcU+bSLGbqKa70qGf79KgiH+LHvDL8ELlk3ENTnDedBcNHBkUkwREMtdz01qWl4k X-Received: by 2002:a17:906:d290:b0:87a:dadd:c5aa with SMTP id ay16-20020a170906d29000b0087adaddc5aamr6510748ejb.2.1675384611856; Thu, 02 Feb 2023 16:36:51 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1675384611; cv=none; d=google.com; s=arc-20160816; b=J5odQHMOIt16laBoz2L4wEOTzGGFvB+ZoRY8XFzN1b6R5dvhQK01XkmGTqjA8j7+0E 3QSjVBZLF7SECLaBzBTt0qcVWQx52J8aT5T9HIrgZoDfnDrSguWuIv4ioqH6tfpm1uSN r+bTaUDNY42ChMftVfL7HQUKwWcLBpwYzHGK6BNbvFCsakWM+8Ed16wGBnBj01mMZxfB RGMWc+Mj4M27C0Jy8PSJtANB2HWxBUdHYOD8mWImH7hUWfIbaucO7ZEmcx9rjM4LyXRT OZydp7Bz8mQblGr0KlVRAY74GoHtT5fU9f8tjWBtsyAacptxT4AkZhcq4yi2AtwYnRZm xqBQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=P64sEEgdXAcZEgqwS2XBi6yNzsTXCiHZWWCCaDmfkWI=; b=lSDndoxGDyKNXb15BePhdFA22sNhq65gvBRV0Z2AEvHDv4nW62shRKy7tNQaKOV3Aq K8PxuWJZRgY8Aa10OzVQMQ5IsR9pref/arnBiW+ze2OX7fO1Yp8w6nLoqh6etE2rb83s IeMB4KNhUfBK6PDH1PGba+ixUvnc3I974yBY/oelhJ7Nu+iAiKaIVbBorFShZdSseJ6T 0h1TBA6mVcawwWzj9BFqbSU9DrTDtCn6WuapBNLUweqh0iSZ9T63XvCFTf+ftIV5vcNZ L/5X5LI7havanmmJvCVXKtqM4CDjvBZJYYeC1j7KBxbTW133VSvGQT9RU+6nc3J5Fqlq LF+w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=GrN8c1zq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id f12-20020a170906738c00b0084d7c8a4bdfsi1480534ejl.276.2023.02.02.16.36.27; Thu, 02 Feb 2023 16:36:51 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=GrN8c1zq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230057AbjBCA2u (ORCPT + 99 others); Thu, 2 Feb 2023 19:28:50 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54566 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233129AbjBCA2Q (ORCPT ); Thu, 2 Feb 2023 19:28:16 -0500 Received: from ams.source.kernel.org (ams.source.kernel.org [IPv6:2604:1380:4601:e00::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 671052CC76; Thu, 2 Feb 2023 16:28:12 -0800 (PST) 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 ams.source.kernel.org (Postfix) with ESMTPS id 08FF4B828DC; Fri, 3 Feb 2023 00:28:11 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id A6B3DC433EF; Fri, 3 Feb 2023 00:28:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1675384089; bh=uR+rWazLwbtNzV99k2M2cRim465eq897QVUvq4Ip/WY=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=GrN8c1zq+J+itxtunkdMTASPZg3ADtKBZAoYkr5TDGJnnVIXeFU58Tj7z0Tk0OQWl cdPhkafoM3qHSPg/G4FqZwCFBOVREy+4vmcsZBuaE7BKER/x6bAHvCxLzNheJvIHO+ 87K1PrwD/bskFQRy6EzWeoyigHHdWmmLgrN5lURl0B+IOWwnHXigvRbMZT+rPWuADu AhyB7bUO4yTzLYhqHYPz8nFcIF+rxSRm+zaiRvGI2WqZoanyIgBEZ0bKoY9On1MAkS sXv+I+bXzQlKd6L3stJdGVJTfb086t+szFLDUNsMemTi+8/47v5/j/+HMBOUyB8Erk 5sLGxv6kzY0oQ== From: Eric Biggers To: stable@vger.kernel.org Cc: Harshit Mogalapalli , Kees Cook , SeongJae Park , Seth Jenkins , Jann Horn , "Eric W . Biederman" , linux-hardening@vger.kernel.org, linux-kernel@vger.kernel.org, Marco Elver , Dmitry Vyukov , Ingo Molnar , Peter Zijlstra , Juri Lelli , Vincent Guittot , Dietmar Eggemann , Steven Rostedt , Ben Segall , Mel Gorman , Daniel Bristot de Oliveira , Valentin Schneider , Andrey Ryabinin , Alexander Potapenko , Andrey Konovalov , Vincenzo Frascino , Andrew Morton , David Gow , tangmeng , Shuah Khan , Petr Mladek , "Paul E. McKenney" , Sebastian Andrzej Siewior , "Guilherme G. Piccoli" , Tiezhu Yang , kasan-dev@googlegroups.com, linux-mm@kvack.org, Luis Chamberlain Subject: [PATCH 4.19 v2 11/15] panic: Consolidate open-coded panic_on_warn checks Date: Thu, 2 Feb 2023 16:27:13 -0800 Message-Id: <20230203002717.49198-12-ebiggers@kernel.org> X-Mailer: git-send-email 2.39.1 In-Reply-To: <20230203002717.49198-1-ebiggers@kernel.org> References: <20230203002717.49198-1-ebiggers@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-getmail-retrieved-from-mailbox: =?utf-8?q?INBOX?= X-GMAIL-THRID: =?utf-8?q?1756768094610250845?= X-GMAIL-MSGID: =?utf-8?q?1756768094610250845?= From: Kees Cook commit 79cc1ba7badf9e7a12af99695a557e9ce27ee967 upstream. Several run-time checkers (KASAN, UBSAN, KFENCE, KCSAN, sched) roll their own warnings, and each check "panic_on_warn". Consolidate this into a single function so that future instrumentation can be added in a single location. Cc: Marco Elver Cc: Dmitry Vyukov Cc: Ingo Molnar Cc: Peter Zijlstra Cc: Juri Lelli Cc: Vincent Guittot Cc: Dietmar Eggemann Cc: Steven Rostedt Cc: Ben Segall Cc: Mel Gorman Cc: Daniel Bristot de Oliveira Cc: Valentin Schneider Cc: Andrey Ryabinin Cc: Alexander Potapenko Cc: Andrey Konovalov Cc: Vincenzo Frascino Cc: Andrew Morton Cc: David Gow Cc: tangmeng Cc: Jann Horn Cc: Shuah Khan Cc: Petr Mladek Cc: "Paul E. McKenney" Cc: Sebastian Andrzej Siewior Cc: "Guilherme G. Piccoli" Cc: Tiezhu Yang Cc: kasan-dev@googlegroups.com Cc: linux-mm@kvack.org Reviewed-by: Luis Chamberlain Signed-off-by: Kees Cook Reviewed-by: Marco Elver Reviewed-by: Andrey Konovalov Link: https://lore.kernel.org/r/20221117234328.594699-4-keescook@chromium.org Signed-off-by: Eric Biggers --- include/linux/kernel.h | 1 + kernel/panic.c | 9 +++++++-- kernel/sched/core.c | 3 +-- mm/kasan/report.c | 3 +-- 4 files changed, 10 insertions(+), 6 deletions(-) diff --git a/include/linux/kernel.h b/include/linux/kernel.h index 50733abbe548e..a28ec4c2f3f5a 100644 --- a/include/linux/kernel.h +++ b/include/linux/kernel.h @@ -327,6 +327,7 @@ extern long (*panic_blink)(int state); __printf(1, 2) void panic(const char *fmt, ...) __noreturn __cold; void nmi_panic(struct pt_regs *regs, const char *msg); +void check_panic_on_warn(const char *origin); extern void oops_enter(void); extern void oops_exit(void); void print_oops_end_marker(void); diff --git a/kernel/panic.c b/kernel/panic.c index a078d413042f2..08b8adc55b2bf 100644 --- a/kernel/panic.c +++ b/kernel/panic.c @@ -125,6 +125,12 @@ void nmi_panic(struct pt_regs *regs, const char *msg) } EXPORT_SYMBOL(nmi_panic); +void check_panic_on_warn(const char *origin) +{ + if (panic_on_warn) + panic("%s: panic_on_warn set ...\n", origin); +} + /** * panic - halt the system * @fmt: The text string to print @@ -540,8 +546,7 @@ void __warn(const char *file, int line, void *caller, unsigned taint, if (args) vprintk(args->fmt, args->args); - if (panic_on_warn) - panic("panic_on_warn set ...\n"); + check_panic_on_warn("kernel"); print_modules(); diff --git a/kernel/sched/core.c b/kernel/sched/core.c index a034642497718..46227cc48124d 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3316,8 +3316,7 @@ static noinline void __schedule_bug(struct task_struct *prev) print_ip_sym(preempt_disable_ip); pr_cont("\n"); } - if (panic_on_warn) - panic("scheduling while atomic\n"); + check_panic_on_warn("scheduling while atomic"); dump_stack(); add_taint(TAINT_WARN, LOCKDEP_STILL_OK); diff --git a/mm/kasan/report.c b/mm/kasan/report.c index 5c169aa688fde..3ae996824a040 100644 --- a/mm/kasan/report.c +++ b/mm/kasan/report.c @@ -176,8 +176,7 @@ static void kasan_end_report(unsigned long *flags) pr_err("==================================================================\n"); add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE); spin_unlock_irqrestore(&report_lock, *flags); - if (panic_on_warn) - panic("panic_on_warn set ...\n"); + check_panic_on_warn("KASAN"); kasan_enable_current(); }