From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from kanga.kvack.org (kanga.kvack.org [205.233.56.17]) by smtp.lore.kernel.org (Postfix) with ESMTP id EAA59C3DA4A for ; Tue, 20 Aug 2024 17:30:57 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 64BE76B0092; Tue, 20 Aug 2024 13:30:57 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 5FC0A6B0095; Tue, 20 Aug 2024 13:30:57 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 4C3A86B0096; Tue, 20 Aug 2024 13:30:57 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0015.hostedemail.com [216.40.44.15]) by kanga.kvack.org (Postfix) with ESMTP id 2D5326B0092 for ; Tue, 20 Aug 2024 13:30:57 -0400 (EDT) Received: from smtpin30.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay05.hostedemail.com (Postfix) with ESMTP id A1D81403FF for ; Tue, 20 Aug 2024 17:30:56 +0000 (UTC) X-FDA: 82473314112.30.1DAE2E0 Received: from mail-wr1-f43.google.com (mail-wr1-f43.google.com [209.85.221.43]) by imf02.hostedemail.com (Postfix) with ESMTP id AD35C8001B for ; Tue, 20 Aug 2024 17:30:54 +0000 (UTC) Authentication-Results: imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=NoHjJpQd; spf=pass (imf02.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1724174950; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=7wISXuCBhmhFmaFFKaHK4h6CHKUfKYQSgO+IzNbasqs=; b=BrQnW9FgrHb0cs/Gl2emHQGvAWzlY7TBhf+5I7snN4ClmKepZZzL3TvIuNXetHjaPjpWfO LRjzifkhTQQ9gMDzVckXb4EPU13DBsfkM5YRnTghjBZjhPE174UbCZfg4nC9XQjcMXMsvc a+IdGQ82uKtmKeP0aNvlZCtB2NP7N7o= ARC-Authentication-Results: i=1; imf02.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=NoHjJpQd; spf=pass (imf02.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.221.43 as permitted sender) smtp.mailfrom=andreyknvl@gmail.com; dmarc=pass (policy=none) header.from=gmail.com ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1724174950; a=rsa-sha256; cv=none; b=AT1YbkyYDa1Sn3zfIOGiUT3ac+hAPZ7Mjv+6GjjBC5TLFVmha+M6UaxhM2mJcIzwCxkRQU sqVaJa0/TNFG/yn/+I4BD6icFXsln3bIURY+ifAjLWj1MY10ttspcgPVjYeru2SOVwZ1If lTTharevxsZKv545G6U0BZua0yWDzkc= Received: by mail-wr1-f43.google.com with SMTP id ffacd0b85a97d-371893dd249so3099406f8f.2 for ; Tue, 20 Aug 2024 10:30:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724175053; x=1724779853; darn=kvack.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=7wISXuCBhmhFmaFFKaHK4h6CHKUfKYQSgO+IzNbasqs=; b=NoHjJpQdj/aF/126y8N5EcvUOCFtVUiZb8lhkCMGf8IRFCytHstfpH8e23LdfMyGWN cuO7KlyH/gH/b+/YtbY5rzpM+8H047LbTSidNTMy1zTaz47U5OX2NOAZtTjU/wRgzAOg f8+CvA5Q42c1TyMzdfusLPggkBjF6DJjWw9WcqYp7mgdsT3YVhAlbI0//0iFYaPmyU8r bFAmBxztsHqSARxmMOyoHBrUIjthe3eQSPW1tOZWWs8b4eOC53VSwdXjCvAQaWGjEoaK 5I+A0jfdqPY8bReF74XyTZ3pNGp3vs0JVCusdYFlToJdcF7ihfJgu91vMZ3kV9iX6Sp8 Vwkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724175053; x=1724779853; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=7wISXuCBhmhFmaFFKaHK4h6CHKUfKYQSgO+IzNbasqs=; b=dp7ab9MLaNT2Vx1NrEIo1QaLpaq57qmtbbE2EMAa8e1jOs4Ebda8T0Y1fyKT4q3Ysm q5BBCDr7yfjTUK2b12ojdwmP2bRtLyTK8EiHLc7Ao+e/SnwCGsVqk3c5K4f1IrjqVpZu wvfrSSr9jpibNN3r7fYELx16FqtRobzwUg/Ied9AoDpxPavOecMIeA6YTAY393/65nKq S/uMNjg9ZUq4U8YHEWAueyH3ZhMEH7mdGLFLaFzQAzSwwQiBEn+1Aa7xu9hfdpXlCHvb I1H6koMICYyXtZXkIAhOdl+kZoShP0VrxqMgtC8zTov3uy+PXM5ffvUGALbwM786TMLY H+qQ== X-Forwarded-Encrypted: i=1; AJvYcCWSIamAIbS+9onqXRBR10PK2OZMh+YyZA2KHVrcUDrTk7M77knnHa0br21VS+iP7InMpL37jmt05CJQMqw7WeQ3ZC0= X-Gm-Message-State: AOJu0Yzlvn+Tshd/dC7JV497pC5pfGtad6rZMzuty4Paq84bSeQYu/cj rYchLO00bR4xi8loPuinR6SV++qlunG1KDDL13z+PsSdK5uT7038/DHzWUT3Hg0lkKuoIzcA4NT 8wL9Wd7cyBylPqCwxNO0EaHSkDM8= X-Google-Smtp-Source: AGHT+IEAtX244iYeZYPk7sy9TeAceSFJTN5yXWToK5PNGBrEPxv2PkC7QDXiz5Fnm4hlwP9R1e29NsFLdm/qMR+Mbbs= X-Received: by 2002:a5d:4386:0:b0:362:b906:99c4 with SMTP id ffacd0b85a97d-371c6060c90mr1694765f8f.58.1724175052539; Tue, 20 Aug 2024 10:30:52 -0700 (PDT) MIME-Version: 1.0 References: <20240819213534.4080408-1-mmaurer@google.com> <20240819213534.4080408-3-mmaurer@google.com> In-Reply-To: <20240819213534.4080408-3-mmaurer@google.com> From: Andrey Konovalov Date: Tue, 20 Aug 2024 19:30:41 +0200 Message-ID: Subject: Re: [PATCH v3 2/4] kbuild: rust: Enable KASAN support To: Matthew Maurer Cc: dvyukov@google.com, ojeda@kernel.org, Andrey Ryabinin , Masahiro Yamada , Alex Gaynor , Wedson Almeida Filho , Nathan Chancellor , aliceryhl@google.com, samitolvanen@google.com, kasan-dev@googlegroups.com, linux-mm@kvack.org, glider@google.com, Nicolas Schier , Vincenzo Frascino , Boqun Feng , Gary Guo , =?UTF-8?Q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Nick Desaulniers , Bill Wendling , Justin Stitt , linux-kbuild@vger.kernel.org, linux-kernel@vger.kernel.org, rust-for-linux@vger.kernel.org, llvm@lists.linux.dev Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Rspamd-Server: rspam06 X-Rspamd-Queue-Id: AD35C8001B X-Stat-Signature: xiuqecctgq4m84ghn7h7hxdx4g4auhax X-Rspam-User: X-HE-Tag: 1724175054-943561 X-HE-Meta: U2FsdGVkX19r+IcZbOKGRSIBgMMoxzpEotSSSnIvsIoOzzWkq1FbisF5TE4f0JeRivH7Jfzi/NesDoUrrox6z2LQeY8Gd13YVG2xyeQPDX3PKfzU0O0azjuPxOcKYGPueJvOf347fAcvk+SxLgrDxLvxQM3gi6t4pqyebpoGqQF17MhslYYc8OtROgK0JJ3o7+ssVIHeEgQNckG91OcCiKBmM9FdHZ3zNMdoQKMrIjSIEEyzRwA2v68tW9Xo8GydYHZqB0jHqJL/6nAAPWscfx6Q6I53QNrK9yKB1yPcOinRIvNpjjUb4Eii1WP6oXZTZdJ3j9lFvL50EsPix1UeDLncrhmcbn1po9zj1GhkBgNmX2QVjgHNFiJwVXO44+JtjHxILQrpuQLIA823NGDvp++FZYaRL5g6KnAbbr+nfkBnl1uqJc2/k1xKTDJnyDqP537eBW+Y2jujddKizl86eaT9xH6nQP1QcdX81L1w5aaSt1RplNVSfohfBombRgpy+YbQtFEgxN6mTExEQiQntUQEfDIKVsy4rvN99XuiXb9XJCmg010pShp/1of9tEuilXTUstT3GxHXnVDBNWAn1h5eptpYpkTValsAk+ZEzBYo33ufGVvZO4r++2JwaM6N0KNHrLa6KMvozMeboE64apN4azCx1jSzgYBEdVjejALDJmd4G7fSQxu9S3O4RQlqO3m8mh/abkUPsnRJsAfOupwRo1dtbVZLEixpACOYqTsyfPdAVZxFA6tUKVpSUArisVrIOci8GtteFZb+eIdHY5XPgLHpHlf2GC0yuT6IQwm0wHLEbO3OKhDBsiQHYDtiNkyuabA4Go5DnBZmP3pNyGrep30qze/+1yvM4846bGB5x7/6mQioLjV8vyhcD4/7ZpR5I0hymyxDXgAVPfOUlCGj7y6JASY61HEF1SYvIRRuySmqZrReYu6Z98Kb7g2SuArYAf8iz9CcEvVd1bu yxSvkMAs AiEicu9mChkoo3kR/I9PiB9NfBQbjG2JJU+T4bRz9jomyiNczTcW/yx9T1CvzYzsI4oJzRqnAYjUZTuSYTWCz41H3q5j/k24GhqVf0ZXsVR4R9f+5CDnm3LygFbp1Y7i/G9/AmaydqqZHEhTYROMPDbRJR+6Ce6WaeXtQ3gM+IR3WJAAW+QKlluALH8PwwpFXW4ME1wd6TXny/0SsUeOsTz0+gA35CkqeRDvKLoBfaz6OOYWi1M5caB97HFKN/gdeBx0xkV4TTcTr2H8qnci5kdB6MQa/mdR7vkPhlYX7PRkf03D+dgW01VO52sgEINK2qvwFii3LOn+bduo8KYmYp1sDGBgJcqrRkGLMQUyREe6bTFQQCcMdhnORBEg1X75FfB0c8JjkjDQb7DeJzJ83Jt3R07Ci5qY9736PuX6UHno2kFtFZS/THbbH8GCHn28kFCba5T9qSzkNE+4= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: On Mon, Aug 19, 2024 at 11:35=E2=80=AFPM Matthew Maurer wrote: > > Rust supports KASAN via LLVM, but prior to this patch, the flags aren't > set properly. > > Rust hasn't yet enabled software-tagged KWHASAN (only regular HWASAN), > so explicitly prevent Rust from being selected when it is enabled. This is done in the next patch, not in this one. > Suggested-by: Miguel Ojeda > Signed-off-by: Matthew Maurer > --- > scripts/Makefile.kasan | 54 +++++++++++++++++++++++---------- > scripts/Makefile.lib | 3 ++ > scripts/generate_rust_target.rs | 1 + > 3 files changed, 42 insertions(+), 16 deletions(-) > > diff --git a/scripts/Makefile.kasan b/scripts/Makefile.kasan > index aab4154af00a..163640fdefa0 100644 > --- a/scripts/Makefile.kasan > +++ b/scripts/Makefile.kasan > @@ -12,6 +12,11 @@ endif > KASAN_SHADOW_OFFSET ?=3D $(CONFIG_KASAN_SHADOW_OFFSET) > > cc-param =3D $(call cc-option, -mllvm -$(1), $(call cc-option, --param $= (1))) > +rustc-param =3D $(call rustc-option, -Cllvm-args=3D-$(1),) > + > +check-args =3D $(foreach arg,$(2),$(call $(1),$(arg))) > + > +kasan_params :=3D > > ifdef CONFIG_KASAN_STACK > stack_enable :=3D 1 > @@ -41,39 +46,56 @@ CFLAGS_KASAN :=3D $(call cc-option, -fsanitize=3Dkern= el-address \ > $(call cc-option, -fsanitize=3Dkernel-address \ > -mllvm -asan-mapping-offset=3D$(KASAN_SHADOW_OFFSET))) > > -# Now, add other parameters enabled similarly in both GCC and Clang. > -# As some of them are not supported by older compilers, use cc-param. > -CFLAGS_KASAN +=3D $(call cc-param,asan-instrumentation-with-call-thresho= ld=3D$(call_threshold)) \ > - $(call cc-param,asan-stack=3D$(stack_enable)) \ > - $(call cc-param,asan-instrument-allocas=3D1) \ > - $(call cc-param,asan-globals=3D1) > +# The minimum supported `rustc` version has a minimum supported LLVM > +# version late enough that we can assume support for -asan-mapping-offse= t Nit: dot at the end. > +RUSTFLAGS_KASAN :=3D -Zsanitizer=3Dkernel-address \ > + -Zsanitizer-recover=3Dkernel-address \ > + -Cllvm-args=3D-asan-mapping-offset=3D$(KASAN_SHADOW_OF= FSET) > + > +# Now, add other parameters enabled similarly in GCC, Clang, and rustc. > +# As some of them are not supported by older compilers, these will be fi= ltered > +# through `cc-param` or `rust-param` as applicable. > +kasan_params +=3D asan-instrumentation-with-call-threshold=3D$(call_thre= shold) \ > + asan-stack=3D$(stack_enable) \ > + asan-instrument-allocas=3D1 \ > + asan-globals=3D1 > > # Instrument memcpy/memset/memmove calls by using instrumented __asan_me= m*() > # instead. With compilers that don't support this option, compiler-inser= ted > # memintrinsics won't be checked by KASAN on GENERIC_ENTRY architectures= . > -CFLAGS_KASAN +=3D $(call cc-param,asan-kernel-mem-intrinsic-prefix=3D1) > +kasan_params +=3D asan-kernel-mem-intrinsic-prefix=3D1 > > endif # CONFIG_KASAN_GENERIC > > ifdef CONFIG_KASAN_SW_TAGS > > ifdef CONFIG_KASAN_INLINE > - instrumentation_flags :=3D $(call cc-param,hwasan-mapping-offset= =3D$(KASAN_SHADOW_OFFSET)) > + kasan_params +=3D hwasan-mapping-offset=3D$(KASAN_SHADOW_OFFSET) > else > - instrumentation_flags :=3D $(call cc-param,hwasan-instrument-with= -calls=3D1) > + kasan_params +=3D hwasan-instrument-with-calls=3D1 > endif > > -CFLAGS_KASAN :=3D -fsanitize=3Dkernel-hwaddress \ > - $(call cc-param,hwasan-instrument-stack=3D$(stack_enable)= ) \ > - $(call cc-param,hwasan-use-short-granules=3D0) \ > - $(call cc-param,hwasan-inline-all-checks=3D0) \ > - $(instrumentation_flags) > +kasan_params +=3D hwasan-instrument-stack=3D$(stack_enable) \ > + hwasan-use-short-granules=3D0 \ > + hwasan-inline-all-checks=3D0 Let's put these kasan_params parts after CFLAGS_KASAN. > + > +CFLAGS_KASAN :=3D -fsanitize=3Dkernel-hwaddress > +RUSTFLAGS_KASAN :=3D -Zsanitizer=3Dkernel-hwaddress \ > + -Zsanitizer-recover=3Dkernel-hwaddress What's the intention of defining RUSTFLAGS_KASAN for SW_TAGS if it's not supported by Rust? Should this be removed? If this is just a foundation for potential future support of Rust+SW_TAGS, please add a comment explaining this. And also please put the patch that disallows Rust+SW_TAGS before this one, if you keep RUSTFLAGS_KASAN. > # Instrument memcpy/memset/memmove calls by using instrumented __hwasan_= mem*(). > ifeq ($(call clang-min-version, 150000)$(call gcc-min-version, 130000),y= ) > - CFLAGS_KASAN +=3D $(call cc-param,hwasan-kernel-mem-intrinsic-pre= fix=3D1) > + kasan_params +=3D hwasan-kernel-mem-intrinsic-prefix=3D1 > endif > > endif # CONFIG_KASAN_SW_TAGS > > -export CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE > +# Add all as-supported KASAN LLVM parameters requested by the configurat= ion Nit: dot at the end. > +CFLAGS_KASAN +=3D $(call check-args, cc-param, $(kasan_params)) > + > +ifdef CONFIG_RUST > + # Avoid calling `rustc-param` unless Rust is enabled. > + RUSTFLAGS_KASAN +=3D $(call check-args, rustc-param, $(kasan_para= ms)) > +endif # CONFIG_RUST > + > +export CFLAGS_KASAN CFLAGS_KASAN_NOSANITIZE RUSTFLAGS_KASAN > diff --git a/scripts/Makefile.lib b/scripts/Makefile.lib > index 9f06f6aaf7fc..4a58636705e0 100644 > --- a/scripts/Makefile.lib > +++ b/scripts/Makefile.lib > @@ -167,6 +167,9 @@ ifneq ($(CONFIG_KASAN_HW_TAGS),y) > _c_flags +=3D $(if $(patsubst n%,, \ > $(KASAN_SANITIZE_$(target-stem).o)$(KASAN_SANITIZE)$(is-k= ernel-object)), \ > $(CFLAGS_KASAN), $(CFLAGS_KASAN_NOSANITIZE)) > +_rust_flags +=3D $(if $(patsubst n%,, \ > + $(KASAN_SANITIZE_$(target-stem).o)$(KASAN_SANITIZE)$(is-k= ernel-object)), \ > + $(RUSTFLAGS_KASAN)) > endif > endif > > diff --git a/scripts/generate_rust_target.rs b/scripts/generate_rust_targ= et.rs > index ced405d35c5d..c24c2abd67db 100644 > --- a/scripts/generate_rust_target.rs > +++ b/scripts/generate_rust_target.rs > @@ -192,6 +192,7 @@ fn main() { > } > ts.push("features", features); > ts.push("llvm-target", "x86_64-linux-gnu"); > + ts.push("supported-sanitizers", ["kernel-address"]); > ts.push("target-pointer-width", "64"); > } else if cfg.has("LOONGARCH") { > panic!("loongarch uses the builtin rustc loongarch64-unknown-non= e-softfloat target"); > -- > 2.46.0.184.g6999bdac58-goog >