Received: by 2002:a05:6a10:d5a5:0:0:0:0 with SMTP id gn37csp4475121pxb; Tue, 5 Oct 2021 04:01:51 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxZd4hxZMffrZCHyeDIhh1j9b9fJrkJsDfCnprEKMBJ9UBKZxZKHt8ef8o3c9IJ1Gk81lQL X-Received: by 2002:a05:6512:3e0a:: with SMTP id i10mr2703000lfv.10.1633431710873; Tue, 05 Oct 2021 04:01:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1633431710; cv=none; d=google.com; s=arc-20160816; b=z4yj3fzbv+a3PnBBwEZUchTvmxq11kFRR0B5AM7QoxaDtUenf1h1ChzUidv+y/6C7Z b2E47IcaenTlGCkHdTMhezrBl0tzklEf4lpxHUFVZvKV5b89gEL5C0gx0fk9kPlNM2gS cch/qO8ILu48fS4LJAKd0XJpF81jwXTbtUlaHBe/YymPRO3pw5N94eNTe5D62zWeLh0+ zQGYgUU1upujj+H6NEztPLZAkXCZXY6sF7uGPDQxD3MyhdSLw8d0pDWRjTlJVX5k9BMv R7Idq6Au0CVsULQtePCNn7SYYxNyzGXo8CxQFQbTYq9PFfABh4wThGmprGZB9fbrxjT8 vH0g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:from:subject:references:mime-version :message-id:in-reply-to:date:dkim-signature; bh=AjGY1e3Ekh8sgb5t91HD4gatgCiWO+4KwBntiL6GjSk=; b=CIVaGC3J3fML3LIpg/97d3Pl3okWlu4A5VBWjdRHICtQFUe6G/i6xYbd+wTie3mb+E MqJ+ImRBg6P5DEVNmFWOlIJJC5+/qtQHkP+vHmxsiX8rg2uSZCP48OHM60G9IpSzgBXf Azmkg0x6qeqVo0v5teFuJuPrOKor/owp652NIWpm4DhCxtsi/UoO6sCEcmCdnE3I+Ggn icrI3WIpI4cAZUPK+7O7AwEyi4/NVuVQcibUGuOue5NrDrp/mCKK6dIOuv0u2gtZDCnL 1V2h0lUnvuGP9o5zlC4OZWRHtrkaXZT++N7VgyGDdqGk7/y/tUeu6mgOpBN6BZTfOEQ0 jYdA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=ZQrlEFr3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z3si20096078edm.39.2021.10.05.04.01.22; Tue, 05 Oct 2021 04:01:50 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=ZQrlEFr3; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234220AbhJELBi (ORCPT + 99 others); Tue, 5 Oct 2021 07:01:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51942 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234217AbhJELBg (ORCPT ); Tue, 5 Oct 2021 07:01:36 -0400 Received: from mail-qk1-x74a.google.com (mail-qk1-x74a.google.com [IPv6:2607:f8b0:4864:20::74a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 455A5C061749 for ; Tue, 5 Oct 2021 03:59:46 -0700 (PDT) Received: by mail-qk1-x74a.google.com with SMTP id bk9-20020a05620a1a0900b0045df00f93a9so26658784qkb.1 for ; Tue, 05 Oct 2021 03:59:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc; bh=AjGY1e3Ekh8sgb5t91HD4gatgCiWO+4KwBntiL6GjSk=; b=ZQrlEFr3YQ/+5PCz0GS+jbo9xkwwJ4ivZGR3ebnyZMr1Colxs8QWGY8hV8W0xas9h8 WQDJHHdrEq5JlXN+biRpbf/mNFhbe0EZYmp07Lz+GO2Twg5RZqkzCZ+c6tIb5zySPIrS RZPc9ZskueXz5HUDsfa/9PliBmLVxfNeVgKm0vIEqszSW1eiYiAsiaCRVOgI/dEGiL8F 4iK80wkLYccMV8XGWfh8qATkpPJZeqX7jiaF62slW9X7FXWbGQTnMxTWZcIEY65ZPz30 eBCmrzlZNBW4aHKmRxfWl+NQW5TnCqFPyFTeQdKYp7F4rbep0fiXyyZh/qmOU7JRRIdF flew== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc; bh=AjGY1e3Ekh8sgb5t91HD4gatgCiWO+4KwBntiL6GjSk=; b=VvRq/Zd5tIWtsThuU4f6Gvj2kK7v7F5XT3wvt5haHmGan0MxGmRE54PesNTgJUpBYo sMN+6Y3IpLAzElItK8NFwiBnfFwq2q1WvIb0VT7ql9s20ISkyHgN08ZuFiPB3OyaRK29 nCD3Yosy5iTbeTLDaxOUYtBXgSsO1VR40wZLOYKbPlT7/PJWxbY6dmfndBjyVyNXEfH1 tq4VsUBDRFtJFuT60tXBI2Z2s0rlLIe2oDaOAyBWWXaMOEZPoWBAGybEZu6ZfdC8EffP vixiQZ+omk1Q6gpeH9sVjpEjLWMVVw7mwlClsPjWxKofPvskbHuSw/u04CEMPYmrTxgM jXtQ== X-Gm-Message-State: AOAM530tHhqEj1MdYLXLbtH/0d4T8JBGef00JN+k0nRjPC/k0jNMJhVR qEcTXGZRhga5f0KCKZ+bz4ID9KRyjw== X-Received: from elver.muc.corp.google.com ([2a00:79e0:15:13:e44f:5054:55f8:fcb8]) (user=elver job=sendgmr) by 2002:a05:6214:a4d:: with SMTP id ee13mr23024272qvb.6.1633431585442; Tue, 05 Oct 2021 03:59:45 -0700 (PDT) Date: Tue, 5 Oct 2021 12:58:43 +0200 In-Reply-To: <20211005105905.1994700-1-elver@google.com> Message-Id: <20211005105905.1994700-2-elver@google.com> Mime-Version: 1.0 References: <20211005105905.1994700-1-elver@google.com> X-Mailer: git-send-email 2.33.0.800.g4c38ced690-goog Subject: [PATCH -rcu/kcsan 01/23] kcsan: Refactor reading of instrumented memory From: Marco Elver To: elver@google.com, "Paul E . McKenney" Cc: Alexander Potapenko , Boqun Feng , Borislav Petkov , Dmitry Vyukov , Ingo Molnar , Josh Poimboeuf , Mark Rutland , Peter Zijlstra , Thomas Gleixner , Waiman Long , Will Deacon , kasan-dev@googlegroups.com, linux-arch@vger.kernel.org, linux-doc@vger.kernel.org, linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, x86@kernel.org Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Factor out the switch statement reading instrumented memory into a helper read_instrumented_memory(). No functional change. Signed-off-by: Marco Elver --- kernel/kcsan/core.c | 51 +++++++++++++++------------------------------ 1 file changed, 17 insertions(+), 34 deletions(-) diff --git a/kernel/kcsan/core.c b/kernel/kcsan/core.c index 4b84c8e7884b..6bfd3040f46b 100644 --- a/kernel/kcsan/core.c +++ b/kernel/kcsan/core.c @@ -325,6 +325,21 @@ static void delay_access(int type) udelay(delay); } +/* + * Reads the instrumented memory for value change detection; value change + * detection is currently done for accesses up to a size of 8 bytes. + */ +static __always_inline u64 read_instrumented_memory(const volatile void *ptr, size_t size) +{ + switch (size) { + case 1: return READ_ONCE(*(const u8 *)ptr); + case 2: return READ_ONCE(*(const u16 *)ptr); + case 4: return READ_ONCE(*(const u32 *)ptr); + case 8: return READ_ONCE(*(const u64 *)ptr); + default: return 0; /* Ignore; we do not diff the values. */ + } +} + void kcsan_save_irqtrace(struct task_struct *task) { #ifdef CONFIG_TRACE_IRQFLAGS @@ -482,23 +497,7 @@ kcsan_setup_watchpoint(const volatile void *ptr, size_t size, int type, unsigned * Read the current value, to later check and infer a race if the data * was modified via a non-instrumented access, e.g. from a device. */ - old = 0; - switch (size) { - case 1: - old = READ_ONCE(*(const u8 *)ptr); - break; - case 2: - old = READ_ONCE(*(const u16 *)ptr); - break; - case 4: - old = READ_ONCE(*(const u32 *)ptr); - break; - case 8: - old = READ_ONCE(*(const u64 *)ptr); - break; - default: - break; /* ignore; we do not diff the values */ - } + old = read_instrumented_memory(ptr, size); /* * Delay this thread, to increase probability of observing a racy @@ -511,23 +510,7 @@ kcsan_setup_watchpoint(const volatile void *ptr, size_t size, int type, unsigned * racy access. */ access_mask = ctx->access_mask; - new = 0; - switch (size) { - case 1: - new = READ_ONCE(*(const u8 *)ptr); - break; - case 2: - new = READ_ONCE(*(const u16 *)ptr); - break; - case 4: - new = READ_ONCE(*(const u32 *)ptr); - break; - case 8: - new = READ_ONCE(*(const u64 *)ptr); - break; - default: - break; /* ignore; we do not diff the values */ - } + new = read_instrumented_memory(ptr, size); diff = old ^ new; if (access_mask) -- 2.33.0.800.g4c38ced690-goog