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 58756C5320E for ; Tue, 20 Aug 2024 19:57:38 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id DE8B06B0082; Tue, 20 Aug 2024 15:57:37 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id CAC626B0083; Tue, 20 Aug 2024 15:57:37 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id B75076B0085; Tue, 20 Aug 2024 15:57:37 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0017.hostedemail.com [216.40.44.17]) by kanga.kvack.org (Postfix) with ESMTP id 9B37D6B0082 for ; Tue, 20 Aug 2024 15:57:37 -0400 (EDT) Received: from smtpin10.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay04.hostedemail.com (Postfix) with ESMTP id 152E11A0393 for ; Tue, 20 Aug 2024 19:57:37 +0000 (UTC) X-FDA: 82473683754.10.1B2D6EB Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) by imf15.hostedemail.com (Postfix) with ESMTP id 345BFA002E for ; Tue, 20 Aug 2024 19:57:34 +0000 (UTC) Authentication-Results: imf15.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=EMH8ss3Y; spf=pass (imf15.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.128.54 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=1724183816; 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=/KPBbBX5wpC6PVE5IR8WFqGQpyvLg+k2OvzqLlHMens=; b=Ib7t0JMZEjKBzTLLjLdX+AuvOXwDUTGtHAAUMiIe0BKdvXZEz67h5GyfnlGv1LfAwDwusf /x9bs63D/1d91dy1NUA0LtlmMzrGvRe7QH/2VQwFA1JPswctM3EQVyCiCk7ci2A/jX3mwB E0L1G+QU0TZwCWPr3Yzj2+yXM31SfDI= ARC-Authentication-Results: i=1; imf15.hostedemail.com; dkim=pass header.d=gmail.com header.s=20230601 header.b=EMH8ss3Y; spf=pass (imf15.hostedemail.com: domain of andreyknvl@gmail.com designates 209.85.128.54 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=1724183816; a=rsa-sha256; cv=none; b=faPA1glyVH1TIiqE3Jxo9ZsglmpSHrfL0jJdDG/3Z4XI/pMIoImqWHwxF/KGL/XG1E0/Ak x8OmYnc0NlDUIiHj5aD3q59b4MUmLmStsCq9aOqCA8j0NfCCDsuO04+1lcVBRN0XQbJ46N 0xnALSSopMFB+hnDhOFOn2rwSKxKfGA= Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-42817f1eb1fso47747675e9.1 for ; Tue, 20 Aug 2024 12:57:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1724183854; x=1724788654; 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=/KPBbBX5wpC6PVE5IR8WFqGQpyvLg+k2OvzqLlHMens=; b=EMH8ss3YY0jmCxgMw/4uz3HhyjHs3YXTRgj20Iz+tC3i3sP3yFhzJnXHsAiwvbUbff cM+P5x78mjtmc/H20Ka6Ty9qDewGIctqQx0uKmHGwsh8aFe2LBTZeZdsf3pF2cMl1co4 ykTNQa0j6BoHcfSAOm45SeyMwu3celD/XVW8s1xWtGHFIlD9TEyWSpTXGRGGlcyhO2Aq 9wEeeOyU7A/c+iUS8VaLBhYKEjDcetdXT5zZAK8hETar9OvHoIAYu7Y/x3xn+fhu4JOg szoXMBVApr5aY3iXhpzHaGYSAxJILtXTKqXkFhc4knli/XYPmE2pIyZlPiygQPTjcCTl k+dw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1724183854; x=1724788654; 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=/KPBbBX5wpC6PVE5IR8WFqGQpyvLg+k2OvzqLlHMens=; b=h5D0zb/l61fDWQ5QjXa8aevicwdhPuMM3e4wPwU67HjPk5t/tzMD1EBsaBBod2jg7l tIeM0+Jl+ORWWjYG4VBeVpA/mYMU0tJgUFztD3LQjQjXK86/EqsQQQswiiWBQeTTtCp7 1MjmWiZUieOM9u9T+eHyzCquuUuPys+UxeKUQ9il24lewx8Zapp49gO/RE7BPs6t3Bas 8pC9z4fsUHHv4/w5lqH/0438ZC/9RYjS/l+r0mpQm/92+MWszMK9kJDPQbugytW1Bul1 saBnaw9fza9zUjYpHU/5Oq9/A+6MaV0Scb0yD/SUCfRrfLhsp6bcWtT1dzL2rCw+gaF5 6Sug== X-Forwarded-Encrypted: i=1; AJvYcCXe2ziPzTFHAbVEyBHrMWO+1IW3+mqGmDoi1SkG546YKwZ2SiP6YXeNe1cOs19wsK5+DXcm22pwBQ==@kvack.org X-Gm-Message-State: AOJu0YyXo5e6yjVmrXHXttxCllJpkfCMAHkkUktPli/RmA1JF5d7w3dl PrwxZ8lcY4EjvgOOSUDYl0SKg2mCFQF8mU4p+Gl5cUjBDGhsOoulxs9nFLLNw2PIOAmGJ16ZLPU +v25L5cMAnUhuVNXlOoMiSGdaZu4= X-Google-Smtp-Source: AGHT+IEmI/5xREA0tOZZ0ojHWyI/EcTZ0nmrmzoxXvgsOqpOoMTrvfJTZWqSFTXL3ayPxhTH3zkbifWhhrYtUHcQ8Oo= X-Received: by 2002:a5d:408f:0:b0:367:958e:9821 with SMTP id ffacd0b85a97d-372fd5b8d37mr64604f8f.29.1724183853281; Tue, 20 Aug 2024 12:57:33 -0700 (PDT) MIME-Version: 1.0 References: <20240820194910.187826-1-mmaurer@google.com> <20240820194910.187826-4-mmaurer@google.com> In-Reply-To: <20240820194910.187826-4-mmaurer@google.com> From: Andrey Konovalov Date: Tue, 20 Aug 2024 21:57:22 +0200 Message-ID: Subject: Re: [PATCH v4 3/4] kbuild: rust: Enable KASAN support To: Matthew Maurer Cc: ojeda@kernel.org, Masahiro Yamada , Andrey Ryabinin , Alex Gaynor , Wedson Almeida Filho , Nathan Chancellor , dvyukov@google.com, aliceryhl@google.com, samitolvanen@google.com, kasan-dev@googlegroups.com, linux-mm@kvack.org, glider@google.com, Vincenzo Frascino , Nicolas Schier , 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: rspam03 X-Rspam-User: X-Rspamd-Queue-Id: 345BFA002E X-Stat-Signature: aecgyjzfax99f7jjxgri9gdefmzpein7 X-HE-Tag: 1724183854-183154 X-HE-Meta: U2FsdGVkX18d5t3lf4aHBM+rleUQ1ik/PkZ7v+sGywBNKOgVZp+dyP6qNQJgenB5zq2wsfF3vAc3hG4mMVZO/sNrHVtuuN3sEZwrXcF+Cp/vswJl4ci7ciEAiJPIx/ATMTkGptInM9OFsCSq3Xr9uxyp+PUjdLj2xrJ+NLjOpP/0UhppCrMRI1oVpUuGQjC0qaB1FdKsvhydLr+CTPzYfB8TjjKJeFhdUI146GRTnAyBWpPa/M8/TLyc5NzhEeOcDUp1+eMwjLxxS71884vmbHKhtDzUy+VuEgB4k7SyQZ2qZ0CmDkrOKGP9+CnSkQ45eqxa1gsNw+fjJG5B9PnRpJTTPppMGyOEcbePvhmnED+cjjtfpqsxNobkc9dYQ5L0Wt+4DW8uD6Rd/fuMAPjgUgXmFu4QDtNRj1bnZruPxS86FjZ29MRyO5iGwqNqqqBPKsDCMM+OuYNBxnpx5WF2UDwKJ50P3HvajyXMSLnPi5EtoGiIcLuhzJ5UxNO7aOO1QKUgyP1bC6UWGH7yer36x6f7PiPTbFIerX8kDuYXOWsMo61f04OQ1G7YKGWxJRI8xSDeYYtzwFrtm8Xew8ZrLr9TEuEZHGPu9kKsjDaMDvOoUdZ1hcifcN87xIdHIa2hUKer8kqxFoN85Ov4NUzmJH4djDnSlHuVXm9bGuf99d4ZCBQthKKGnn6ruSh0Ib/7QGz27frOSex2pyFnVsD5lyHIsk70raBB3b3531s5Bv65Rl1ZMjAi31vKCjw5+V25iXZ60aqWPFM0wwicaV3cKyTSJznnQ/yBozRUYV8TTR2V8vZhN1m3i6nTOKW61hABFUWBKODBK5shaXJ5I1mQ8WTLd3cQw9NayDV7NqtAAmSHYrn8X7iXh/g26jj9TE6oxE/LFCvGQBBgEfaNgaviQBVldMK8S6YPeWua2YAdRjdSLLFNA7VdZBDwF4xpEsG4wRSX3Mbmej0wEtqEEDr hPzvZUQA GSrNNjKizVIQliGSdpr4AjkEn/sqRxgP4cefQjHws7BsLBdh3tePr0PiCPF0DccXmCFjXQ+PHYmdQkzEeTTt8Fkjtw4EI6+xhlI7RqLs2EekKpthz+lrrPQ0lH9mQWZ0hm06wCRyrFh1ZJ0eiTOTVjQitC7ndgEXfc+xi7FgTbPiTJosD57c0yBCkSEuajiyvQMTo8UpI16ZJ6gIJj6jdGVAI9ShUIi3aQeu8VLGHWyD0ICj9wiKkW8FmWnCKnCqW5J7lfmzpwo92vb39nj/vKJNnvLmNqZZQqdvGLzvHpJ5Q1YlOejNE4kzAcr0inYdpqkLJ5kBtEMhYruxX4zFuOGCsjlqzUtbTCF4Irvy30hs7l/AEryrm4reG4TGhzBdvZ7ZgZDFSZ7aHLVkPfoi7am+GGimQ3sw9CjV0pWskEf3qBCqnKrfspxfNGAsVM//ahv+yobf4Twd7Jxo= X-Bogosity: Ham, tests=bogofilter, spamicity=0.000022, 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 Tue, Aug 20, 2024 at 9:49=E2=80=AFPM Matthew Maurer = wrote: > > Rust supports KASAN via LLVM, but prior to this patch, the flags aren't > set properly. > > Suggested-by: Miguel Ojeda > Signed-off-by: Matthew Maurer > --- > scripts/Makefile.kasan | 57 ++++++++++++++++++++++++--------- > scripts/Makefile.lib | 3 ++ > scripts/generate_rust_target.rs | 1 + > 3 files changed, 45 insertions(+), 16 deletions(-) > > diff --git a/scripts/Makefile.kasan b/scripts/Makefile.kasan > index aab4154af00a..97570df40a98 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,59 @@ 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. > +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 > > +CFLAGS_KASAN :=3D -fsanitize=3Dkernel-hwaddress > + > +# This sets flags that will enable KHWASAN once enabled in Rust. These w= ill Nit: the kernel doesn't use the term KHWASAN, it's SW_TAGS KASAN or Software Tag-Based KASAN. > +# not work today, and is guarded against in dependencies for CONFIG_RUST= . > +RUSTFLAGS_KASAN :=3D -Zsanitizer=3Dkernel-hwaddress \ > + -Zsanitizer-recover=3Dkernel-hwaddress > + > 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 > > # 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. > +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 >