Received: by 2002:a5b:505:0:0:0:0:0 with SMTP id o5csp7399844ybp; Wed, 16 Oct 2019 08:07:33 -0700 (PDT) X-Google-Smtp-Source: APXvYqyYSo3arpWz3+J+p/hnxM5EhuQMR3JpqkMf218z/3EIXLXBJThV/GtD04tZZlbNicF2T1lU X-Received: by 2002:a05:6402:12ca:: with SMTP id k10mr39717353edx.91.1571238453842; Wed, 16 Oct 2019 08:07:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1571238453; cv=none; d=google.com; s=arc-20160816; b=fgRlTIiGkpTedwObTEpXIe5eyxiA9nqyDspPbUnxkIPysmudRnOPoSk6j/X2a61Yqv yocyxD53Vn6TkmnAXC0zSqYxp+TKfOSL+3IdZ+3jBbqus28ixebGDt4LYsG5gy+GX0Kw mCSsqGRBhG9Pz1AP3H4GsBuphVmdMyE93fkoMqbDv2f5nBXFee0UxZyBrff63iCGMymf Mh4PeCkRfW43UKHIoiNkxCXv3fOxhA2LHokUKaKnuHgQ8540QsJ8JnASUKtj3LycfU0R IRjWPeRpJRs+3uvi5ERb8WnOAG3KVpUNsFqVyA/n+tdKaIYeVOReIysVVQsa5hVtog0G 5+2w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=4FFfdl/5HhwgogS+uQMVCmerpDy+QFALdziBFwG47Ho=; b=SL7OXnJblkh5Ei1qnlqelFLhp46QPOXYppA4zWKzP9kjfTIb0KTYj/tB6eFZ0/la0c Qgmi8ngnSjH2nzcP9h3mGYIvrP3sEB66S9AvWYx5Qh6ZPQntxsqnuBaFpXqyURz9kzRy 6OYSv5zCBWxvQQUjJ9v49ut1bgOTGsFVPpXsFOPDYy8sgel0fahOfoAtpa3p0mMRynyI IneiODzIZeGWRGnfsYiE316fuNvp4FqpOb3ynxY73305rePp44A2ftZRdFeWhoc+xUaT 4XK659S8mErr0W0rcFbJ/o0jICwFxLpTsD51HU487U7LznTFbzv2/xaDS6pYnTXNyzgF w9dA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=qxYBTI3s; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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. [209.132.180.67]) by mx.google.com with ESMTP id m39si18546130edc.243.2019.10.16.08.07.09; Wed, 16 Oct 2019 08:07:33 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@google.com header.s=20161025 header.b=qxYBTI3s; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 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 S2389426AbfJPLrp (ORCPT + 99 others); Wed, 16 Oct 2019 07:47:45 -0400 Received: from mail-ot1-f65.google.com ([209.85.210.65]:40349 "EHLO mail-ot1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388069AbfJPLro (ORCPT ); Wed, 16 Oct 2019 07:47:44 -0400 Received: by mail-ot1-f65.google.com with SMTP id y39so19838572ota.7 for ; Wed, 16 Oct 2019 04:47:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=4FFfdl/5HhwgogS+uQMVCmerpDy+QFALdziBFwG47Ho=; b=qxYBTI3sDAIe67leQB17PCwhFI+UWqXoCGfOvVZPliY25X9Cp/O2IdRxHSCUnyWG4q Tu5RtHDfeIIAwieu+6Cwh17xFFs59XSifqxoV8fjVPl+qwfuOSDsUNOvDZKGmwUEnROU BQwsxUVu18fnl8vNb9VtrZm7KX1m1ZdfyyiOvKciuypBvupKsxgYYRXrjAxaPFjmyVPk VNdWQtpdWBS3JaivSzlYgGfD1+lzCSW6pxicnllkR4LcOqIQSBVdnETIiV1fJby9fziv gt2ywLf1FY3q+ebS4ed36RPp/4sHlRtB31NCq4sIrHh+8s/E7PBOrKYJ5th3o/KNQRHQ xXGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=4FFfdl/5HhwgogS+uQMVCmerpDy+QFALdziBFwG47Ho=; b=WGvv8unxxGhlLsaM2WpLrrrj2KfPPFisGiOPdqbrpTU7XMdIbYMvhJtFOt/JzMf26G 7bIUivcJM/ducoKQqHx2xjWH+JiMYfyGc5jUgDl4+73/XqPWRW1sYGvGUMrcM7yE9qmV RLENt2vd5Tt96bVi8fx/hrvaiukyRYy3wqQL5Y3RWa3NZVV7+MMv59egTW64zjTnsxu7 Jg1yY3qTUir9EJlz/DmBt4JuDv/uNxRezDnPQilyORkg8KPUnbe0NmpESdIHUILyiwPN oPJopAhwGRt9GUQvzPF0A/D+r1Pq+US8O8GBc1HbM6AsCz/loh4BNruyaTB8pKkQPiuV Q7Aw== X-Gm-Message-State: APjAAAUww3h2NLINOQ0/cg4gvyPEyEoO/p6Zbp4Mt+Ra41crm1pOkq3y cH82Uh5mbR27bE6WnXPfxvFUqPtSzRmr4YRjrfRrGA== X-Received: by 2002:a9d:724e:: with SMTP id a14mr34065885otk.23.1571226461723; Wed, 16 Oct 2019 04:47:41 -0700 (PDT) MIME-Version: 1.0 References: <20191016083959.186860-1-elver@google.com> <20191016083959.186860-8-elver@google.com> <20191016111847.GB44246@lakrids.cambridge.arm.com> In-Reply-To: <20191016111847.GB44246@lakrids.cambridge.arm.com> From: Marco Elver Date: Wed, 16 Oct 2019 13:47:30 +0200 Message-ID: Subject: Re: [PATCH 7/8] locking/atomics, kcsan: Add KCSAN instrumentation To: Mark Rutland Cc: LKMM Maintainers -- Akira Yokosawa , Alan Stern , Alexander Potapenko , Andrea Parri , Andrey Konovalov , Andy Lutomirski , Ard Biesheuvel , Arnd Bergmann , Boqun Feng , Borislav Petkov , Daniel Axtens , Daniel Lustig , dave.hansen@linux.intel.com, dhowells@redhat.com, Dmitry Vyukov , "H. Peter Anvin" , Ingo Molnar , Jade Alglave , Joel Fernandes , Jonathan Corbet , Josh Poimboeuf , Luc Maranget , Nicholas Piggin , "Paul E. McKenney" , Peter Zijlstra , Thomas Gleixner , Will Deacon , kasan-dev , linux-arch , "open list:DOCUMENTATION" , linux-efi@vger.kernel.org, linux-kbuild@vger.kernel.org, LKML , Linux Memory Management List , "the arch/x86 maintainers" Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, 16 Oct 2019 at 13:18, Mark Rutland wrote: > > Hi Marco, > > On Wed, Oct 16, 2019 at 10:39:58AM +0200, Marco Elver wrote: > > This adds KCSAN instrumentation to atomic-instrumented.h. > > > > Signed-off-by: Marco Elver > > --- > > include/asm-generic/atomic-instrumented.h | 192 +++++++++++++++++++++- > > scripts/atomic/gen-atomic-instrumented.sh | 9 +- > > 2 files changed, 199 insertions(+), 2 deletions(-) > > > > diff --git a/include/asm-generic/atomic-instrumented.h b/include/asm-generic/atomic-instrumented.h > > index e8730c6b9fe2..9e487febc610 100644 > > --- a/include/asm-generic/atomic-instrumented.h > > +++ b/include/asm-generic/atomic-instrumented.h > > @@ -19,11 +19,13 @@ > > > > #include > > #include > > +#include > > > > static inline int > > atomic_read(const atomic_t *v) > > { > > kasan_check_read(v, sizeof(*v)); > > + kcsan_check_atomic(v, sizeof(*v), false); > > For legibility and consistency with kasan, it would be nicer to avoid > the bool argument here and have kcsan_check_atomic_{read,write}() > helpers... > > > diff --git a/scripts/atomic/gen-atomic-instrumented.sh b/scripts/atomic/gen-atomic-instrumented.sh > > index e09812372b17..c0553743a6f4 100755 > > --- a/scripts/atomic/gen-atomic-instrumented.sh > > +++ b/scripts/atomic/gen-atomic-instrumented.sh > > @@ -12,15 +12,20 @@ gen_param_check() > > local type="${arg%%:*}" > > local name="$(gen_param_name "${arg}")" > > local rw="write" > > + local is_write="true" > > > > case "${type#c}" in > > i) return;; > > esac > > > > # We don't write to constant parameters > > - [ ${type#c} != ${type} ] && rw="read" > > + if [ ${type#c} != ${type} ]; then > > + rw="read" > > + is_write="false" > > + fi > > > > printf "\tkasan_check_${rw}(${name}, sizeof(*${name}));\n" > > + printf "\tkcsan_check_atomic(${name}, sizeof(*${name}), ${is_write});\n" > > ... which would also simplify this. > > Though as below, we might want to wrap both in a helper local to > atomic-instrumented.h. > > > } > > > > #gen_param_check(arg...) > > @@ -108,6 +113,7 @@ cat < > ({ \\ > > typeof(ptr) __ai_ptr = (ptr); \\ > > kasan_check_write(__ai_ptr, ${mult}sizeof(*__ai_ptr)); \\ > > + kcsan_check_atomic(__ai_ptr, ${mult}sizeof(*__ai_ptr), true); \\ > > arch_${xchg}(__ai_ptr, __VA_ARGS__); \\ > > }) > > EOF > > @@ -148,6 +154,7 @@ cat << EOF > > > > #include > > #include > > +#include > > We could add the following to this preamble: > > static inline void __atomic_check_read(const volatile void *v, size_t size) > { > kasan_check_read(v, sizeof(*v)); > kcsan_check_atomic(v, sizeof(*v), false); > } > > static inline void __atomic_check_write(const volatile void *v, size_t size) > { > kasan_check_write(v, sizeof(*v)); > kcsan_check_atomic(v, sizeof(*v), true); > } > > ... and only have the one call in each atomic wrapper. > > Otherwise, this looks good to me. Thanks, incorporated suggestions for v2: for readability rename kcsan_check_access -> kcsan_check_{read,write}, and for atomic-instrumented.h, adding the suggested preamble. Thanks, -- Marco