Received: by 2002:a05:6358:bb9e:b0:b9:5105:a5b4 with SMTP id df30csp3055496rwb; Mon, 5 Sep 2022 05:57:47 -0700 (PDT) X-Google-Smtp-Source: AA6agR6WRNtNeWZvwOBKTdRx3bhNFktOYbkWL+mAVV7FWvSCqtfTd8GMDRPuwg0D+t7x1c+lti8v X-Received: by 2002:a05:6a00:2787:b0:537:d9b1:f942 with SMTP id bd7-20020a056a00278700b00537d9b1f942mr47031561pfb.30.1662382667745; Mon, 05 Sep 2022 05:57:47 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662382667; cv=none; d=google.com; s=arc-20160816; b=FEIA0amErqAdC2+5GM4LkvP8A/p9AS/g49Hz5oiZQkSunqYA1Sit2ZzhdmbABYn/gl 80O91nRS2h+AQFpn/1sfUV7Pf/8VX83L0HyY0ZKSHlNoX54bnioN6RIoKo+Hw4UsNV95 PoZ/j6ICeuyHS+qEVBi3bHFz5RFeXGUtWWAtJefGfY/4qukeNkMp6IhpUyiRMfWZyKw8 TYRQ8MtQe/j0kNJORw7VO8ZDHSnDZyv22pCC5FpbfWEdslFiAKGhV5SL3kaJs4vRPfuH kJdgGdPov2SauMm4s/+W57Ftbhc/52cAlwLttSlMlgVFcNbNawj3d+U2weaJUFxBVgwD Twrw== 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:message-id:references :mime-version:in-reply-to:date:dkim-signature; bh=FNkIx/jm8VmVwIUxP0UOjGDN2D7zAcH5S0k2sC/Umx8=; b=K3OzEpehSTGrWZVBtU6dJF1PaGSgNqgCElC4b/MPkSTNobLxA+A/XjKAv5fvlX6krd upWdzJwPxhmRRWKQ6Zp2PMdVyC7gHLi7UfzfMzCUw7v74KaMCJwQihNO4LleM1pRKWOa Krkj2eF7VXcz3TEhcX05gl56ZdgNXhIn+hTuqdc2fwb8k2gu6tr6hIYwbyAIL28VEg8W zuRqbbnvzKw9ue2DF2+UDXzcWzBLBER/24HXuxRTaq6Fz8vUB/0qY+wbMsLr6vziZkex 2vgOI1VzrAPdAEyvtd1Wc9/0Tz2/1Ni+NwVn0n+6QHBUHMjE7RX0tiw45TZXMxKJnW2V JV9Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=K+RIqV9b; 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 k13-20020a170902ce0d00b0016f007ecddbsi10415019plg.66.2022.09.05.05.57.35; Mon, 05 Sep 2022 05:57:47 -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=K+RIqV9b; 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 S237242AbiIEMZu (ORCPT + 99 others); Mon, 5 Sep 2022 08:25:50 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57538 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237574AbiIEMZY (ORCPT ); Mon, 5 Sep 2022 08:25:24 -0400 Received: from mail-ej1-x649.google.com (mail-ej1-x649.google.com [IPv6:2a00:1450:4864:20::649]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id ACB82220CF for ; Mon, 5 Sep 2022 05:25:17 -0700 (PDT) Received: by mail-ej1-x649.google.com with SMTP id qa35-20020a17090786a300b0073d4026a97dso2255908ejc.9 for ; Mon, 05 Sep 2022 05:25:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date; bh=FNkIx/jm8VmVwIUxP0UOjGDN2D7zAcH5S0k2sC/Umx8=; b=K+RIqV9beAonadyBIcL4IRNACaa724k+xc3GpC5ckKIhvZhUePRt9dtYRV1GAqf/Nc w2OjXApEkBuoGciM5C1kXqOkygXqELx0VLQNDDQ7Y86XC8kp3T5UHq7BcN7wIRBCJB32 mKNsyfPyIbvSfGRQd3nqAnx7kF44IWoIRFG2z8XDKqWvSkAVXhJpOFauF5xN8YviYhkY dtO7kDeBKVZdkJ1+Xm6NUcm75BpdRrxwOPyZvT1n/YybRfHPXpH18/sQuGgOErQKLFpY NwUXF9fbAKFFz0nEk9l78fr7ESIV+xkTNrrjSt3K+78HEj2WBk/8BqSpJCdgVmUY8xc9 NeWw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date; bh=FNkIx/jm8VmVwIUxP0UOjGDN2D7zAcH5S0k2sC/Umx8=; b=PPiixGEXsk34gnueqw0nhtUjdBi1S29PxNREEWFSdEch3kA5ZSzTL++ms7XyX7OwPM A+5t/4TDecV7Ce3JbRVDX4P+Ii91vAlo6s5L/ZSRRZxbcvUz96SMwwHz/l5cK26QW87m RJd4/U26AfZApjoa3+o96AHQUxxeduLLKzmW1iPZLnOhiUjOlFUadCVuFjHwUxX9AXD4 VA8iPFVdXmUirON09Tof9EiuipzjmBTOuzK1qaGlLnwL/Mxq0JZD5Y7BUgZYQLULHUEO Oy6MDWjRyYUmmWl/rHTavyL29S4gyW6Ktm3hJDdjaEyzvKv15WMLXhIitHdUyinViLez mH+Q== X-Gm-Message-State: ACgBeo0s5Jy+eRimu50YYoJzgGJpxBoersO7OUhIgVz1Gb5eHgkkJamw CMGPzlqcz5cyfC3VVZM4vU/k9KVScR0= X-Received: from glider.muc.corp.google.com ([2a00:79e0:9c:201:b808:8d07:ab4a:554c]) (user=glider job=sendgmr) by 2002:a17:907:2bf9:b0:73d:dd00:9ce8 with SMTP id gv57-20020a1709072bf900b0073ddd009ce8mr33496068ejc.151.1662380716059; Mon, 05 Sep 2022 05:25:16 -0700 (PDT) Date: Mon, 5 Sep 2022 14:24:15 +0200 In-Reply-To: <20220905122452.2258262-1-glider@google.com> Mime-Version: 1.0 References: <20220905122452.2258262-1-glider@google.com> X-Mailer: git-send-email 2.37.2.789.g6183377224-goog Message-ID: <20220905122452.2258262-8-glider@google.com> Subject: [PATCH v6 07/44] kmsan: introduce __no_sanitize_memory and __no_kmsan_checks From: Alexander Potapenko To: glider@google.com Cc: Alexander Viro , Alexei Starovoitov , 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 , kasan-dev@googlegroups.com, 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=unavailable 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 Reviewed-by: Marco Elver --- 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 c84fec767445d..4fa0cc4cbd2c8 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 9b157b71036f1..f55a37efdb974 100644 --- a/include/linux/compiler-gcc.h +++ b/include/linux/compiler-gcc.h @@ -114,6 +114,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.37.2.789.g6183377224-goog