Received: by 2002:a05:6358:489b:b0:bb:da1:e618 with SMTP id x27csp1653012rwn; Fri, 9 Sep 2022 01:42:20 -0700 (PDT) X-Google-Smtp-Source: AA6agR47A7WrakSN7+wJR/2fqgkhGDi2F9onw5Mp8nVpj+g+3MMKea4uWokqpVnAL90OcqS2fScE X-Received: by 2002:a19:491e:0:b0:498:f63a:26a8 with SMTP id w30-20020a19491e000000b00498f63a26a8mr1002838lfa.400.1662712940664; Fri, 09 Sep 2022 01:42:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662712940; cv=none; d=google.com; s=arc-20160816; b=SN+q2X0NJeQfxUVOFimzWKjtaoQvo6WgCwDWqfRMA64c7sR6osYrIIU2T6h26uA7ud uJtKwKJwkXUywNiujWcnDN0cU0gAPCHH1rF29srrqIgUn2tJ66Eqv62OfzbAoi+51UwK SjYFKiK5pysePJeNiYmIX8A3BGJO8MjDnicienRuRtKUFa5GQRnnmRUJmSNqUduzwKYZ 2ssXmkGZ5XZFCUfhu162dEJX8P5sTRUt0ljKPiRIARSKJS0b/DAHp5X/Yqh025N6KQJO lcbk+kqFSPjoWUzHQWAjloEAuG3Pqbr3ANFlIhDW8PUAADPrD/xpMimyavueD7RBKk3i srlw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=BQBhZcEfl6T9p1U34zgQ/JzWRYaK36lx1DLrHB7PYZQ=; b=n9x0qURzTF8oIOeoV6Qn9oaeHbAd56xRIyWDoxOr9yd1zGGiHd8iLfs+NK9fUTznN8 6Yw0REH+XjDIxHsflazE0+vXohH1VdUGTSNTiInghLvpTgo5JSRhqTGzrXLuQuvDWLHD NRjnF9aGkEjrVCrLZRvbtoNYQEYVTCsHS+JJn6sH3//B/xazEXvYc8Ka2QZI+uRCcBh4 lWGJRKQRyvr9QU1MILmyqGZyiGVfIo62zxpA63/XWh8IKbdjCTbkbxvifpKg6kZF841c 5YJEy07a1QInVKBzP1v7QgaAFzhuMz1XozVmskj8siq6D6FZAzCPPqOhIG+WfZqrLvR5 weMw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20210112 header.b=j09QxsNs; 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 bt4-20020a056512260400b00497e02de1adsi562353lfb.614.2022.09.09.01.41.51; Fri, 09 Sep 2022 01:42:20 -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=j09QxsNs; 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 S230108AbiIIIiY (ORCPT + 99 others); Fri, 9 Sep 2022 04:38:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50356 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230472AbiIIIiW (ORCPT ); Fri, 9 Sep 2022 04:38:22 -0400 Received: from mail-lj1-x233.google.com (mail-lj1-x233.google.com [IPv6:2a00:1450:4864:20::233]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B1D8D12B2BC for ; Fri, 9 Sep 2022 01:38:18 -0700 (PDT) Received: by mail-lj1-x233.google.com with SMTP id z23so1005305ljk.1 for ; Fri, 09 Sep 2022 01:38:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date; bh=BQBhZcEfl6T9p1U34zgQ/JzWRYaK36lx1DLrHB7PYZQ=; b=j09QxsNsiS6ScV7OwpSKQmeohH2DKbk8MbRDvGLQqmFFj3+o0zQSiT8fi+lgn0VfZS oOZOz34KyZ8NMQRv9iQ4lVxa5lqYz2FcGB971Cz4/3uiyh5opfc43F3u30kDXOz2vbHn XGkJ95fRoYADZy99hd8d0cTEF3oThzAUFDqK0k4GKjP7b5zxPSU8qwi2tghumha15dJy wuGILdiH48QfezIT9wAx2qblM6SKGhI6eZag9/mlHTfvuFJwYOoRw+GfawubrnLmpCxL CgkwutO4hNTkkSNUNU/qCkXG8jqKS8cZ529W44ybltGfRLaGYMFMikbpQ9Av5rw4xWYg aj4g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date; bh=BQBhZcEfl6T9p1U34zgQ/JzWRYaK36lx1DLrHB7PYZQ=; b=IuPa6SoxMGdQQspTb9hbDng0OcAh5Z2DOhlomA1VSVyGijraOE4it3uI8aR/DP6AYr Rj/j6iLA7uGk8MIm546EwKWAxAa+nIEmZ13uQEOz4PMtLgJxDHyWpSsthWwZBDXdZyel 7QxStD2NUWOy9SyuIs8JUh6LkNQ0hxd+LzKBRGZ9p5zeZBuFV7cWTDgmVBnGEUHZ2e5I xugf+oV0t19vAkSPTcVVIKgpE1gbobhdGYbXuiZfpa+5b8qT3aGotCSc3fmN8EHjHVq7 pcn5EfaD8bE2Y4oFR+3X+eFrV/ed1Mio/mfos6ZR2WGl50xiWZl2s84/6HlgwVFtmEPM BYDw== X-Gm-Message-State: ACgBeo24kSBOhUH8KdrYuJT7VL+C6vifwSoBeocmdwDDDpL4PyZ+ye8P CaeP5rs2ixRkPAObY1twLw4XDZlcWDxsROLWTu13UjIvwOxFAQ== X-Received: by 2002:a2e:bf07:0:b0:261:cafb:d4a8 with SMTP id c7-20020a2ebf07000000b00261cafbd4a8mr3459885ljr.268.1662712696564; Fri, 09 Sep 2022 01:38:16 -0700 (PDT) MIME-Version: 1.0 References: <20220909073840.45349-1-elver@google.com> <20220909073840.45349-2-elver@google.com> In-Reply-To: <20220909073840.45349-2-elver@google.com> From: Dmitry Vyukov Date: Fri, 9 Sep 2022 10:38:04 +0200 Message-ID: Subject: Re: [PATCH v2 2/3] kcsan: Instrument memcpy/memset/memmove with newer Clang To: Marco Elver Cc: "Paul E. McKenney" , Mark Rutland , Alexander Potapenko , Boqun Feng , kasan-dev@googlegroups.com, linux-kernel@vger.kernel.org, Nathan Chancellor , Nick Desaulniers , llvm@lists.linux.dev, Heiko Carstens , Vasily Gorbik , Alexander Gordeev , Christian Borntraeger , Sven Schnelle , Peter Zijlstra , linux-s390@vger.kernel.org, stable@vger.kernel.org Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-17.6 required=5.0 tests=BAYES_00,DKIMWL_WL_MED, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, ENV_AND_HDR_SPF_MATCH,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE,USER_IN_DEF_DKIM_WL,USER_IN_DEF_SPF_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 On Fri, 9 Sept 2022 at 09:38, Marco Elver wrote: > > With Clang version 16+, -fsanitize=thread will turn > memcpy/memset/memmove calls in instrumented functions into > __tsan_memcpy/__tsan_memset/__tsan_memmove calls respectively. > > Add these functions to the core KCSAN runtime, so that we (a) catch data > races with mem* functions, and (b) won't run into linker errors with > such newer compilers. > > Cc: stable@vger.kernel.org # v5.10+ > Signed-off-by: Marco Elver > --- > v2: > * Fix for architectures which do not provide their own > memcpy/memset/memmove and instead use the generic versions in > lib/string. In this case we'll just alias the __tsan_ variants. > --- > kernel/kcsan/core.c | 39 +++++++++++++++++++++++++++++++++++++++ > 1 file changed, 39 insertions(+) > > diff --git a/kernel/kcsan/core.c b/kernel/kcsan/core.c > index fe12dfe254ec..4015f2a3e7f6 100644 > --- a/kernel/kcsan/core.c > +++ b/kernel/kcsan/core.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > #include > > #include "encoding.h" > @@ -1308,3 +1309,41 @@ noinline void __tsan_atomic_signal_fence(int memorder) > } > } > EXPORT_SYMBOL(__tsan_atomic_signal_fence); > + > +#ifdef __HAVE_ARCH_MEMSET > +void *__tsan_memset(void *s, int c, size_t count); > +noinline void *__tsan_memset(void *s, int c, size_t count) > +{ > + check_access(s, count, KCSAN_ACCESS_WRITE, _RET_IP_); These can use large sizes, does it make sense to truncate it to MAX_ENCODABLE_SIZE? > + return __memset(s, c, count); > +} > +#else > +void *__tsan_memset(void *s, int c, size_t count) __alias(memset); > +#endif > +EXPORT_SYMBOL(__tsan_memset); > + > +#ifdef __HAVE_ARCH_MEMMOVE > +void *__tsan_memmove(void *dst, const void *src, size_t len); > +noinline void *__tsan_memmove(void *dst, const void *src, size_t len) > +{ > + check_access(dst, len, KCSAN_ACCESS_WRITE, _RET_IP_); > + check_access(src, len, 0, _RET_IP_); > + return __memmove(dst, src, len); > +} > +#else > +void *__tsan_memmove(void *dst, const void *src, size_t len) __alias(memmove); > +#endif > +EXPORT_SYMBOL(__tsan_memmove); > + > +#ifdef __HAVE_ARCH_MEMCPY > +void *__tsan_memcpy(void *dst, const void *src, size_t len); > +noinline void *__tsan_memcpy(void *dst, const void *src, size_t len) > +{ > + check_access(dst, len, KCSAN_ACCESS_WRITE, _RET_IP_); > + check_access(src, len, 0, _RET_IP_); > + return __memcpy(dst, src, len); > +} > +#else > +void *__tsan_memcpy(void *dst, const void *src, size_t len) __alias(memcpy); > +#endif > +EXPORT_SYMBOL(__tsan_memcpy); > -- > 2.37.2.789.g6183377224-goog >