Received: by 2002:ac0:da4c:0:0:0:0:0 with SMTP id a12csp356756imi; Thu, 21 Jul 2022 02:15:00 -0700 (PDT) X-Google-Smtp-Source: AGRyM1sdFmqh4hF7ZJeCWiO+HrkoMNO8txn4NpgNTNdwqofl9NqMJmEbvWSPStYPW3+TIm7Rjrm7 X-Received: by 2002:a17:90a:b007:b0:1f1:d31e:4914 with SMTP id x7-20020a17090ab00700b001f1d31e4914mr10397976pjq.36.1658394900495; Thu, 21 Jul 2022 02:15:00 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1658394900; cv=none; d=google.com; s=arc-20160816; b=INFBCiX+3EySKesz6zmY91QDndHUN1sVWQRd0L3K1Z0y7Y7DOyr4vYYKI68CWQWykb ilznScFGsZZTUadciMLXn2AMBtBbMD4wjeVD4ys+CW026F5VDgTW+4z/6qNBzfGCSsA/ XxoLVDDikLdUzamr1CszyvtXaz0AtwaHGniUS0N4OR8D2+4lqCwN8mxv6xNDWu8mDBdQ F5Kz+HWUoWLaz06c6qgmbVg8XCRAMLwrXiE0/hjiuSHWd6FI2mLrhYjsQlJ3KMMUG7ug 6bga/Ns+9byU/WFzScmdxyjVEWQKho11gkt59W7Xk4pYL89WoH3aClojNM+mCbue6S1b iyZQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:robot-unsubscribe :robot-id:message-id:mime-version:references:in-reply-to:cc:subject :to:reply-to:sender:from:dkim-signature:dkim-signature:date; bh=M/5wZ+MtEyeurMIzj9L3QrvkOyWzl+x+6Bpcv+IWBN8=; b=ibpyvSTb9THryAMkk5M2euWWFt/ScHnQTiUDOwR1Aqf4sCcNUGw4j6rYKEhm076OyU 1Vam1dnIrtIzGwyRUKJSIc7QhpmDjzR3/mR+D5drH3W+tU6vC6wT3LgVgZgE/hIqtTDt wKvsvoFZ8Gw/IdhCxpDnK+MkimPjUcaL32jN2zmPo4Rq9pZ76MpyboLJ55ZakfprD5Kp JmCwtuBjH+VFZtvh2YWLC/zmsBNeMesfvMsGqRKEiSIfkZoOvDl2g19My1aBkvYvmKPN UO2C578NRS6kyG9cDA2w1W222QS/ESppfLRiB6iLbNToyxSqQt3Tu+2blgGKJW7maZC0 DcRA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linutronix.de header.s=2020 header.b=IN2Spu0Q; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e header.b=DOY+7LuN; 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=QUARANTINE dis=NONE) header.from=linutronix.de Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id b21-20020a170902b61500b0016bfe8f7232si1554922pls.353.2022.07.21.02.14.45; Thu, 21 Jul 2022 02:15:00 -0700 (PDT) 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=@linutronix.de header.s=2020 header.b=IN2Spu0Q; dkim=neutral (no key) header.i=@linutronix.de header.s=2020e header.b=DOY+7LuN; 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=QUARANTINE dis=NONE) header.from=linutronix.de Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S232537AbiGUIwG (ORCPT + 99 others); Thu, 21 Jul 2022 04:52:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54130 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231726AbiGUIwE (ORCPT ); Thu, 21 Jul 2022 04:52:04 -0400 Received: from galois.linutronix.de (Galois.linutronix.de [IPv6:2a0a:51c0:0:12e:550::1]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8578B62A5C; Thu, 21 Jul 2022 01:52:03 -0700 (PDT) Date: Thu, 21 Jul 2022 08:52:00 -0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020; t=1658393522; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=M/5wZ+MtEyeurMIzj9L3QrvkOyWzl+x+6Bpcv+IWBN8=; b=IN2Spu0QIkH/ib3nJPI2l8dm39XuJFGg+FAi1vuMLvVwksK0Bh4cQ0WZ/jgCL6nXDEucP1 gqrRqV7YGrjg58Ei4tEDFs34Zgzz9FRxnehPqcH4Ejl34DdPbMsOiR1/IJRk9+ae+OCcBX ZftMdRwdtWJFONF22iV4BPo/tW92TqUNxesA0QZOseD4zYrpfEO55zL4TnxxqUbV5yi4VT D2Uqupg33whioQAApqwoO4NE6Hp/usayAi8YH3pTfVrIqjFLsJQl+TGCiz30qNQNREjyeU 73wnG11U5WsXp6boMH6K2qb4kzOz+vdcEEWImOVuqO3vqTnDQkNN7jWDbhP32w== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=linutronix.de; s=2020e; t=1658393522; h=from:from:sender:sender:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=M/5wZ+MtEyeurMIzj9L3QrvkOyWzl+x+6Bpcv+IWBN8=; b=DOY+7LuNGhPFvroxt3sNbrQ0cSP8Oid56wfoax76YlbQBUrl3o7Pen1DL2tP3ViRp5ZvGm 6GBIfTS3DKll0GBA== From: "tip-bot2 for Peter Zijlstra" Sender: tip-bot2@linutronix.de Reply-to: linux-kernel@vger.kernel.org To: linux-tip-commits@vger.kernel.org Subject: [tip: x86/core] x86/extable: Fix ex_handler_msr() print condition Cc: Stephane Eranian , "Peter Zijlstra (Intel)" , x86@kernel.org, linux-kernel@vger.kernel.org In-Reply-To: References: MIME-Version: 1.0 Message-ID: <165839352078.15455.154258296152260339.tip-bot2@tip-bot2> Robot-ID: Robot-Unsubscribe: Contact to get blacklisted from these emails Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,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 The following commit has been merged into the x86/core branch of tip: Commit-ID: a1a5482a2c6e38a3ebed32e571625c56a8cc41a6 Gitweb: https://git.kernel.org/tip/a1a5482a2c6e38a3ebed32e571625c56a8cc41a6 Author: Peter Zijlstra AuthorDate: Fri, 17 Jun 2022 16:52:06 +02:00 Committer: Peter Zijlstra CommitterDate: Thu, 21 Jul 2022 10:39:42 +02:00 x86/extable: Fix ex_handler_msr() print condition On Fri, Jun 17, 2022 at 02:08:52PM +0300, Stephane Eranian wrote: > Some changes to the way invalid MSR accesses are reported by the > kernel is causing some problems with messages printed on the > console. > > We have seen several cases of ex_handler_msr() printing invalid MSR > accesses once but the callstack multiple times causing confusion on > the console. > The problem here is that another earlier commit (5.13): > > a358f40600b3 ("once: implement DO_ONCE_LITE for non-fast-path "do once" functionality") > > Modifies all the pr_*_once() calls to always return true claiming > that no caller is ever checking the return value of the functions. > > This is why we are seeing the callstack printed without the > associated printk() msg. Extract the ONCE_IF(cond) part into __ONCE_LTE_IF() and use that to implement DO_ONCE_LITE_IF() and fix the extable code. Fixes: a358f40600b3 ("once: implement DO_ONCE_LITE for non-fast-path "do once" functionality") Reported-by: Stephane Eranian Signed-off-by: Peter Zijlstra (Intel) Tested-by: Stephane Eranian Link: https://lkml.kernel.org/r/YqyVFsbviKjVGGZ9@worktop.programming.kicks-ass.net --- arch/x86/mm/extable.c | 16 +++++++++------- include/linux/once_lite.h | 20 ++++++++++++++++---- 2 files changed, 25 insertions(+), 11 deletions(-) diff --git a/arch/x86/mm/extable.c b/arch/x86/mm/extable.c index dba2197..331310c 100644 --- a/arch/x86/mm/extable.c +++ b/arch/x86/mm/extable.c @@ -94,16 +94,18 @@ static bool ex_handler_copy(const struct exception_table_entry *fixup, static bool ex_handler_msr(const struct exception_table_entry *fixup, struct pt_regs *regs, bool wrmsr, bool safe, int reg) { - if (!safe && wrmsr && - pr_warn_once("unchecked MSR access error: WRMSR to 0x%x (tried to write 0x%08x%08x) at rIP: 0x%lx (%pS)\n", - (unsigned int)regs->cx, (unsigned int)regs->dx, - (unsigned int)regs->ax, regs->ip, (void *)regs->ip)) + if (__ONCE_LITE_IF(!safe && wrmsr)) { + pr_warn("unchecked MSR access error: WRMSR to 0x%x (tried to write 0x%08x%08x) at rIP: 0x%lx (%pS)\n", + (unsigned int)regs->cx, (unsigned int)regs->dx, + (unsigned int)regs->ax, regs->ip, (void *)regs->ip); show_stack_regs(regs); + } - if (!safe && !wrmsr && - pr_warn_once("unchecked MSR access error: RDMSR from 0x%x at rIP: 0x%lx (%pS)\n", - (unsigned int)regs->cx, regs->ip, (void *)regs->ip)) + if (__ONCE_LITE_IF(!safe && !wrmsr)) { + pr_warn("unchecked MSR access error: RDMSR from 0x%x at rIP: 0x%lx (%pS)\n", + (unsigned int)regs->cx, regs->ip, (void *)regs->ip); show_stack_regs(regs); + } if (!wrmsr) { /* Pretend that the read succeeded and returned 0. */ diff --git a/include/linux/once_lite.h b/include/linux/once_lite.h index 861e606..b7bce49 100644 --- a/include/linux/once_lite.h +++ b/include/linux/once_lite.h @@ -9,15 +9,27 @@ */ #define DO_ONCE_LITE(func, ...) \ DO_ONCE_LITE_IF(true, func, ##__VA_ARGS__) -#define DO_ONCE_LITE_IF(condition, func, ...) \ + +#define __ONCE_LITE_IF(condition) \ ({ \ static bool __section(".data.once") __already_done; \ - bool __ret_do_once = !!(condition); \ + bool __ret_cond = !!(condition); \ + bool __ret_once = false; \ \ - if (unlikely(__ret_do_once && !__already_done)) { \ + if (unlikely(__ret_cond && !__already_done)) { \ __already_done = true; \ - func(__VA_ARGS__); \ + __ret_once = true; \ } \ + unlikely(__ret_once); \ + }) + +#define DO_ONCE_LITE_IF(condition, func, ...) \ + ({ \ + bool __ret_do_once = !!(condition); \ + \ + if (__ONCE_LITE_IF(__ret_do_once)) \ + func(__VA_ARGS__); \ + \ unlikely(__ret_do_once); \ })