Received: by 2002:a05:6a10:2726:0:0:0:0 with SMTP id ib38csp513782pxb; Tue, 29 Mar 2022 07:08:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyaTkJ7hBkr0w3FmDT4kuqJR0hFGuN5nqOz4Rs/xO4L/pWwMVdrAYPxIXs7CFRaU0C/VDxi X-Received: by 2002:a05:6402:11d2:b0:419:7cd7:b25 with SMTP id j18-20020a05640211d200b004197cd70b25mr4716583edw.19.1648562909096; Tue, 29 Mar 2022 07:08:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1648562909; cv=none; d=google.com; s=arc-20160816; b=XCb/bGBg04UQmtOOc3ygl19MeKHddnxVINQRIquRUBrDLQdRZIElFsUEnAy8uk/wiy prOhTeFd5GKuzyP2MpN7r8M6R8UsCIpvpltEIYYgwtwW66Bhz+faoLeRJxAoLTkUq0Di xzcnQ9FlS7guPxz0DYZ/WTeRLtTFYKM/uMhnkzJnN9GYDYBI50UtpdkJ8YYpnPF6Yrm9 kChlMOofeS1awZwrEubyCBZIkbywIP2rcEzCXwvK+HPd9fjaM+1Wu/wXMGbXjT9DE8p2 1K+81E2HWeHZaL1GDalq1buHjepLg3CXQnP8N0snlqmMKDQ01ZyuZD8G2dOirBU4nUws aPWA== 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=UaSjyZbuX4mRK40KL0zvcfvrCfayHvnW+1lMpNenzMM=; b=k/qgt247NcZeGfdyA0JYW+3Q9Gr3tm6bs1dovet3TVv6CPV5EPvHbLqwpilS2sa99E OmYe8Ojnyu+55STKj6xej0+RsdZ+yAScmE4ayivrxVzpw7TTZs5YCRDNTqb+pofTRdy7 /FiiKUnUTfci2zmiWuVteZkv97ph9tRD2hB4a7vp/5v6HPV9jHGbOdifsg3nmDhZ3SBb T+iRtvXK0GoHXSZrzAvTbga8HeCdDOTUcIhj0shB4FpJdB0jJ4Qf9JZveY4FhhblnLvZ xYZLIThgjNmQPYw1nqlyUk1+AKZtrsk6Sb1JKKW+Cs9eVFOyjLLeh2P2Rp8moyHWNGoG jdfg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=pT67FL+i; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id m16-20020aa7c2d0000000b00419d0102fd1si11127678edp.47.2022.03.29.07.08.00; Tue, 29 Mar 2022 07:08:29 -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=@google.com header.s=20210112 header.b=pT67FL+i; 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=REJECT sp=REJECT dis=NONE) header.from=google.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236402AbiC2Mm6 (ORCPT + 99 others); Tue, 29 Mar 2022 08:42:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33920 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236455AbiC2Mmq (ORCPT ); Tue, 29 Mar 2022 08:42:46 -0400 Received: from mail-ed1-x54a.google.com (mail-ed1-x54a.google.com [IPv6:2a00:1450:4864:20::54a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 33911214058 for ; Tue, 29 Mar 2022 05:40:51 -0700 (PDT) Received: by mail-ed1-x54a.google.com with SMTP id c22-20020a50f616000000b004196649d144so10956072edn.10 for ; Tue, 29 Mar 2022 05:40:51 -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=UaSjyZbuX4mRK40KL0zvcfvrCfayHvnW+1lMpNenzMM=; b=pT67FL+iJPznO4FlucflrliCBhKvTTg3KzQEhmg/BoDC0PIplw3vRbgledaaV+22QV PJ/2UpcagqAHZUoUmS6KMEOgg3Z7MJ6MkNWm1ZXIgZy3JMhpaXGLkAOvgIFYB1qAJ0KF I6NW2lJcnoBn97EYtu4eiCl6ODsGpg3JBpDnaoBDHnydn7JC8QLk7eLmg2KpVSgBLImy ia3dXD2aOt8PinRoXSw+HiAUjr2cNNWGiXvsfmcUXKj+k0Ec0UTSj4Yj90p9F6jv5nLE 8q9nAN/NikHW+3ZZmHM89/rK8iQoXaim6KSGFGoalxm66Xa0wGT7M2cU/uJ7ZdLT9o7f Az0Q== 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=UaSjyZbuX4mRK40KL0zvcfvrCfayHvnW+1lMpNenzMM=; b=VVKPMFHkIqKbYAllYgjQG6cVpP4FpLX3A/EFIJE7w3bA7Hy9DoltBtdXnFWsAhDt1b 9WKMvIBknAo4R60PiLmk7fw6lWHQdKddl+jc6x9PDV776jr0R00Xy7wOxXmyGKdSnbbS zLzuwG5BSPu49eWHrKpeerL3o9u6XgL81zBvDIwcQ9cuG2MUy31I9EQD88e01WKkCila eTk30O1+dwysqJM5YvGPJ7yKGO1YDf1YlQbsvaceQduwMTmktOHxJ3slwAqY6y0Ovfyg lsfZALXi08qocmzyJd0sJz2FHH8dGXTm+QyLu/m8DP1g9HyktVIQZz+/r3tFKp/vSWcp VGZw== X-Gm-Message-State: AOAM532BFrZbasG0upeq2hM1gGTPWM+YZ5cBojqyPxu149vka9fyJZhd 65AebLcVTuSWxNUfxz0Ag64W8jP7ENA= X-Received: from glider.muc.corp.google.com ([2a00:79e0:15:13:36eb:759:798f:98c3]) (user=glider job=sendgmr) by 2002:a05:6402:1293:b0:418:fe9d:99c3 with SMTP id w19-20020a056402129300b00418fe9d99c3mr4374732edv.146.1648557649372; Tue, 29 Mar 2022 05:40:49 -0700 (PDT) Date: Tue, 29 Mar 2022 14:39:37 +0200 In-Reply-To: <20220329124017.737571-1-glider@google.com> Message-Id: <20220329124017.737571-9-glider@google.com> Mime-Version: 1.0 References: <20220329124017.737571-1-glider@google.com> X-Mailer: git-send-email 2.35.1.1021.g381101b075-goog Subject: [PATCH v2 08/48] kmsan: introduce __no_sanitize_memory and __no_kmsan_checks From: Alexander Potapenko To: glider@google.com Cc: Alexander Viro , Andrew Morton , Andrey Konovalov , Andy Lutomirski , Arnd Bergmann , Borislav Petkov , Christoph Hellwig , Christoph Lameter , David Rientjes , Dmitry Vyukov , Eric Dumazet , Greg Kroah-Hartman , Herbert Xu , Ilya Leoshkevich , Ingo Molnar , Jens Axboe , Joonsoo Kim , Kees Cook , Marco Elver , Mark Rutland , Matthew Wilcox , "Michael S. Tsirkin" , Pekka Enberg , Peter Zijlstra , Petr Mladek , Steven Rostedt , Thomas Gleixner , Vasily Gorbik , Vegard Nossum , Vlastimil Babka , linux-mm@kvack.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-9.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL 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 __no_sanitize_memory is a function attribute that instructs KMSAN to skip a function during instrumentation. This is needed to e.g. implement the noinstr functions. __no_kmsan_checks is a function attribute that makes KMSAN ignore the uninitialized values coming from the function's inputs, and initialize the function's outputs. Functions marked with this attribute can't be inlined into functions not marked with it, and vice versa. This behavior is overridden by __always_inline. __SANITIZE_MEMORY__ is a macro that's defined iff the file is instrumented with KMSAN. This is not the same as CONFIG_KMSAN, which is defined for every file. Signed-off-by: Alexander Potapenko --- Link: https://linux-review.googlesource.com/id/I004ff0360c918d3cd8b18767ddd1381c6d3281be --- include/linux/compiler-clang.h | 23 +++++++++++++++++++++++ include/linux/compiler-gcc.h | 6 ++++++ 2 files changed, 29 insertions(+) diff --git a/include/linux/compiler-clang.h b/include/linux/compiler-clang.h index 3c4de9b6c6e3e..5f11a6f269e28 100644 --- a/include/linux/compiler-clang.h +++ b/include/linux/compiler-clang.h @@ -51,6 +51,29 @@ #define __no_sanitize_undefined #endif +#if __has_feature(memory_sanitizer) +#define __SANITIZE_MEMORY__ +/* + * Unlike other sanitizers, KMSAN still inserts code into functions marked with + * no_sanitize("kernel-memory"). Using disable_sanitizer_instrumentation + * provides the behavior consistent with other __no_sanitize_ attributes, + * guaranteeing that __no_sanitize_memory functions remain uninstrumented. + */ +#define __no_sanitize_memory __disable_sanitizer_instrumentation + +/* + * The __no_kmsan_checks attribute ensures that a function does not produce + * false positive reports by: + * - initializing all local variables and memory stores in this function; + * - skipping all shadow checks; + * - passing initialized arguments to this function's callees. + */ +#define __no_kmsan_checks __attribute__((no_sanitize("kernel-memory"))) +#else +#define __no_sanitize_memory +#define __no_kmsan_checks +#endif + /* * Support for __has_feature(coverage_sanitizer) was added in Clang 13 together * with no_sanitize("coverage"). Prior versions of Clang support coverage diff --git a/include/linux/compiler-gcc.h b/include/linux/compiler-gcc.h index ccbbd31b3aae5..f6e69387aad05 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h @@ -129,6 +129,12 @@ #define __SANITIZE_ADDRESS__ #endif +/* + * GCC does not support KMSAN. + */ +#define __no_sanitize_memory +#define __no_kmsan_checks + /* * Turn individual warnings and errors on and off locally, depending * on version. -- 2.35.1.1021.g381101b075-goog