From patchwork Mon Oct 23 17:44:45 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miguel Ojeda X-Patchwork-Id: 157019 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:ce89:0:b0:403:3b70:6f57 with SMTP id p9csp1455307vqx; Mon, 23 Oct 2023 10:46:10 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF6LY0HE9tLC+OE62XylFN2n+12TB8zLIO7PzVnhxCHnIehOouDLw0vdDdqS0yWIo5ZXKhW X-Received: by 2002:a17:90a:198e:b0:27d:1b2f:8df1 with SMTP id 14-20020a17090a198e00b0027d1b2f8df1mr12495325pji.14.1698083170101; Mon, 23 Oct 2023 10:46:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698083170; cv=none; d=google.com; s=arc-20160816; b=RgNPNTiyMa1hNO2SfIZFFTBnwINOcUE2B6JNucMx927ZITpKrW29tlxEosLp6UDus1 eDsYJ3ZkrQ+usfB0GZuZZ1k6QB4l5ACe6GM5qCvqdSYyeoQapfIgLNpbC/vPFUZOjrUL DksW2OifT4lj8KF9PcR4URPDfPcV31JtZaDSv2z5+R9pg2EA63tTux4/yGOrH/VKFVTh 3L2TeFdQpqT7R8F27xP/EYtnm214au3DG1H25d93aKEjw167fyIIWqdpem0XUT0iTP+C d4JzS/YiGj6YiNv5qU13lHQ+yocQ+y2cAc9rXkR5k+9ZZ25rWQ5NGK4FNkFu/dzczObQ +o1g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=qksMM2EAlNbvS8D72F4OfBDBRI25QJvfQgv5Njxh5Lo=; fh=+FFPWeMzR8Jr2NK5qu6BPNTtHP28of1ye1jIOy6HsOg=; b=DZiRZfisRGXPk9zkal/Xdn4ndbF8qxnxbAEaFXKBNDOTMcjY00iQn7dGAvys6pGLcT 6ylkE21gNdQ3ezZKC+uOas12IATDz5F/tBdX6oJn7406T4p8FQLSo8Qf6MGVNn85TdDk 1WGdECtCaj5LZmDvjFu8v0Pn7R2GwVuGH8Jg2bp5rH0BIfvaAkHbnud3u+Z7Mo4Zr0+r ilTzTDBvSlJqdY8A6Sm69uJocUpbfQlkHwgmCY31biBblrjKUNtneWbBQxEuTL10AwLa YkEAEFmIc1L1ZbumYABP6D0l6+PlvOuLI8RclXciYtoOGQa8FzXCUi0EzR47ZdLQQ6ss 0f2A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=sHJfJAgG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from groat.vger.email (groat.vger.email. [2620:137:e000::3:5]) by mx.google.com with ESMTPS id b2-20020a17090a990200b0027d27512cd4si6751392pjp.81.2023.10.23.10.46.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Oct 2023 10:46:10 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) client-ip=2620:137:e000::3:5; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=sHJfJAgG; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:5 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 297798084960; Mon, 23 Oct 2023 10:46:06 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233449AbjJWRpZ (ORCPT + 27 others); Mon, 23 Oct 2023 13:45:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58140 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231210AbjJWRpS (ORCPT ); Mon, 23 Oct 2023 13:45:18 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6FA83B4 for ; Mon, 23 Oct 2023 10:45:16 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 3B35EC433C8; Mon, 23 Oct 2023 17:45:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698083116; bh=x+AnEYyCYS2x5kfZRpQSdT2vBC5eC4hfcf5UNbmXbyI=; h=From:To:Cc:Subject:Date:From; b=sHJfJAgGebHbRUreMFoDdC8Zx8dwCATh8GgoqOwJdOdKi6QiUQNgPthgDj+l7nyvc anHJUj49RvwOHDH1ZNUq4L7n6uhCGow7ZrZ7z9YQrom2xQCdZcg8Hj10u69GREJvE0 7nEAeAd30mv52yNgOCDf1i2373ZrpBAhzltQROTz2U4qG/0nIXfXfIdUuL3uQGwWrz tbVYFGsgJrrF8Mo7oOyay4W9phJbcAlGKYKccfiOMnMaozXelfFstGSLZcinX4+nbz JWfiF5wchZHfTlrOJBdvEtztk14mKxsIDTrb0ypSpz+Epg8ZTXnJNFGs86m1ZMqc8C 3YPtcv8wiyirQ== From: Miguel Ojeda To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , Peter Zijlstra , Josh Poimboeuf Cc: Miguel Ojeda , Wedson Almeida Filho , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , x86@kernel.org, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, Daniel Borkmann , "H. Peter Anvin" Subject: [PATCH 1/4] x86/rust: support RETPOLINE Date: Mon, 23 Oct 2023 19:44:45 +0200 Message-ID: <20231023174449.251550-1-ojeda@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Mon, 23 Oct 2023 10:46:06 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1780569257959829945 X-GMAIL-MSGID: 1780569257959829945 Support the `RETPOLINE` speculation mitigation by enabling the target features that Clang does. The existing target feature being enabled was a leftover from our old `rust` branch, and it is not enough: the target feature `retpoline-external-thunk` only implies `retpoline-indirect-calls`, but not `retpoline-indirect-branches` (see LLVM's `X86.td`), unlike Clang's flag of the same name `-mretpoline-external-thunk` which does imply both (see Clang's `lib/Driver/ToolChains/Arch/X86.cpp`). Without this, `objtool` would complain if enabled for individual object files (like it is planned in the future), e.g. rust/core.o: warning: objtool: _R...escape_default+0x13: indirect jump found in RETPOLINE build In addition, change the comment to note that LLVM is the one disabling jump tables when retpoline is enabled, thus we do not need to use `-Zno-jump-tables` for Rust here -- see commit c58f2166ab39 ("Introduce the "retpoline" x86 mitigation technique ...") [1]: The goal is simple: avoid generating code which contains an indirect branch that could have its prediction poisoned by an attacker. In many cases, the compiler can simply use directed conditional branches and a small search tree. LLVM already has support for lowering switches in this way and the first step of this patch is to disable jump-table lowering of switches and introduce a pass to rewrite explicit indirectbr sequences into a switch over integers. As well as a live example at [2]. Cc: Daniel Borkmann Link: https://github.com/llvm/llvm-project/commit/c58f2166ab3987f37cb0d7815b561bff5a20a69a [1] Link: https://godbolt.org/z/esT8xnaxj [2] Signed-off-by: Miguel Ojeda --- arch/x86/Makefile | 2 +- scripts/generate_rust_target.rs | 7 +++++++ 2 files changed, 8 insertions(+), 1 deletion(-) base-commit: 58720809f52779dc0f08e53e54b014209d13eebb diff --git a/arch/x86/Makefile b/arch/x86/Makefile index 5bfe5caaa444..3df7c7c81918 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -195,7 +195,7 @@ ifdef CONFIG_RETPOLINE KBUILD_CFLAGS += $(RETPOLINE_CFLAGS) # Additionally, avoid generating expensive indirect jumps which # are subject to retpolines for small number of switch cases. - # clang turns off jump table generation by default when under + # LLVM turns off jump table generation by default when under # retpoline builds, however, gcc does not for x86. This has # only been fixed starting from gcc stable version 8.4.0 and # onwards, but not for older ones. See gcc bug #86952. diff --git a/scripts/generate_rust_target.rs b/scripts/generate_rust_target.rs index 3c6cbe2b278d..163089ae13ba 100644 --- a/scripts/generate_rust_target.rs +++ b/scripts/generate_rust_target.rs @@ -156,7 +156,14 @@ fn main() { ); let mut features = "-3dnow,-3dnowa,-mmx,+soft-float".to_string(); if cfg.has("RETPOLINE") { + // The kernel uses `-mretpoline-external-thunk` (for Clang), which Clang maps to the + // target feature of the same name plus the other two target features in + // `clang/lib/Driver/ToolChains/Arch/X86.cpp`. These should be eventually enabled via + // `-Ctarget-feature` when `rustc` starts recognizing them (or via a new dedicated + // flag); see https://github.com/rust-lang/rust/issues/116852. features += ",+retpoline-external-thunk"; + features += ",+retpoline-indirect-branches"; + features += ",+retpoline-indirect-calls"; } ts.push("features", features); ts.push("llvm-target", "x86_64-linux-gnu"); From patchwork Mon Oct 23 17:44:46 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miguel Ojeda X-Patchwork-Id: 157021 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:ce89:0:b0:403:3b70:6f57 with SMTP id p9csp1455478vqx; Mon, 23 Oct 2023 10:46:31 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFOHeqKagVOBMRCp8gl0lMy9sAot7VWsEq77AGZ11Rm5/SRtXWf4HitF/zFvM6kY7+6x/39 X-Received: by 2002:a05:6a20:8e10:b0:153:a461:d96e with SMTP id y16-20020a056a208e1000b00153a461d96emr297567pzj.47.1698083190881; Mon, 23 Oct 2023 10:46:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698083190; cv=none; d=google.com; s=arc-20160816; b=tYPnWvlHizqYyNNm7XF4SgTyRJ5yykYBseJpEul4o4bVB3q15b+kTEtVsGZxjSaGej pwcRAX04cBiohFVQmM/HFmv6i1kppXkM3V569IimMrggEaSIspzZ8okzwDWx6fVHgIPI vRJpFCWeIg+CxGvpXHDLHEWVHva3kk2NzvfkZPYihCbQhUgSFOkY96drtfc0Kr0P/AZ7 1GcmgmV06r/HsQlOyM9U1GjGUo1IkLGpmC+k+TwTRnvTov80de4WIlaCV0VHfEzmGS6f QRKra3xJWivxXTxJlkrKi/ybBVMN3QKY1FQBcriHSi3JefP+SCks23Gq8UyGuy26/LMY NMsQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=zvyeHEmddkmBvTRWyqdHxPdGteeJ2wppBUK9pSHssOU=; fh=7V01jAiRby0QRae4s7inyu9tQh+lAAddt7G9BJLL+KM=; b=ZOonjvXgxUgRWO5AximMeGt0/3g7kzHWF5ejWMA/dmy9E8rpd/lt6yx486T56XUnH5 tUTE7SMVSH8cu8BmHe0wlHvXhM48xvhHhwE03LSD2HwQlm8Yll/2AmdR9pcJZJhexa5+ vrtOrUmN3wxUIZhi4Bm443Okjve3Qt0AfAu5x6SzOS/3K/KtXxEEVREfM9waJ0AgJXLk EaUHr3bWjyDhRVfp2BbELePhMdLcfbDOLfqHXu6zy3FtOMm9pvXD9wsE475RmP+5cDim ZaWQ/ThjBSGZfgzw5cRrbdYezPuQRcdrpqhdbM1ivxQ369sp1CBoVrhOSKzW2H91bcId uoOQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=eyGAgSue; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from lipwig.vger.email (lipwig.vger.email. [23.128.96.33]) by mx.google.com with ESMTPS id k11-20020a637b4b000000b005ac86e7df6esi6637057pgn.363.2023.10.23.10.46.30 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Oct 2023 10:46:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) client-ip=23.128.96.33; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=eyGAgSue; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.33 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by lipwig.vger.email (Postfix) with ESMTP id 9F47C807C752; Mon, 23 Oct 2023 10:46:28 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at lipwig.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233921AbjJWRp2 (ORCPT + 27 others); Mon, 23 Oct 2023 13:45:28 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:57984 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233952AbjJWRpW (ORCPT ); Mon, 23 Oct 2023 13:45:22 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 36288D68 for ; Mon, 23 Oct 2023 10:45:21 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 91FD6C433CC; Mon, 23 Oct 2023 17:45:16 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698083120; bh=Re17bBZBn8W2qRuHQlXyTmtDIB19+AtXrQhAAfpI4DQ=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eyGAgSueaNzo2buyhjpYs8BFDkw71EAY3dDuDfWlQX1WW1T/eDwWfl647Hy8XX9ak 25Ax5Z6fooNE0HiqEPYmVUZMt6pSxj7rZPUBN276iPeE0e9A6HMExAW0TMSdlW/392 P1uQFi50B1uK/j6g25zYKpc3uS2/1NmtL3OtxxFaBnd3oZPm16yaa0Hoc7o5/BVMoW Gy9tMgL9+93O9oT7blV7sXNeAHq/nTGoOWqnN3hOSoNSSYxfsuTA8hMwxHg5rhcxt0 vqChJcINqPTg5Faw23BFxEU5MHMnViVOF4haSMVEqGLQVNT31ObDkKL/VIBA6hveuQ 2RAGIvKTuvz0Q== From: Miguel Ojeda To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , Peter Zijlstra , Josh Poimboeuf Cc: Miguel Ojeda , Wedson Almeida Filho , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , x86@kernel.org, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev Subject: [PATCH 2/4] x86/rust: support SLS Date: Mon, 23 Oct 2023 19:44:46 +0200 Message-ID: <20231023174449.251550-2-ojeda@kernel.org> In-Reply-To: <20231023174449.251550-1-ojeda@kernel.org> References: <20231023174449.251550-1-ojeda@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lipwig.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (lipwig.vger.email [0.0.0.0]); Mon, 23 Oct 2023 10:46:28 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1780569280178704068 X-GMAIL-MSGID: 1780569280178704068 Support the `SLS` speculation mitigation by enabling the target features that Clang does. Without this, `objtool` would complain if enabled for individual object files (like it is planned in the future), e.g. rust/core.o: warning: objtool: _R...next_up+0x44: missing int3 after ret Signed-off-by: Miguel Ojeda --- scripts/generate_rust_target.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scripts/generate_rust_target.rs b/scripts/generate_rust_target.rs index 163089ae13ba..7e374369afca 100644 --- a/scripts/generate_rust_target.rs +++ b/scripts/generate_rust_target.rs @@ -165,6 +165,14 @@ fn main() { features += ",+retpoline-indirect-branches"; features += ",+retpoline-indirect-calls"; } + if cfg.has("SLS") { + // The kernel uses `-mharden-sls=all`, which Clang maps to both these target features in + // `clang/lib/Driver/ToolChains/Arch/X86.cpp`. These should be eventually enabled via + // `-Ctarget-feature` when `rustc` starts recognizing them (or via a new dedicated + // flag); see https://github.com/rust-lang/rust/issues/116851. + features += ",+harden-sls-ijmp"; + features += ",+harden-sls-ret"; + } ts.push("features", features); ts.push("llvm-target", "x86_64-linux-gnu"); ts.push("target-pointer-width", "64"); From patchwork Mon Oct 23 17:44:47 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miguel Ojeda X-Patchwork-Id: 157022 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:ce89:0:b0:403:3b70:6f57 with SMTP id p9csp1455493vqx; Mon, 23 Oct 2023 10:46:32 -0700 (PDT) X-Google-Smtp-Source: AGHT+IHDHyevlGttGtwYfIiwOCCGYmKmiYA30/rR5gnDYJ69kX3U+Ich3AcDMJqewT2ah312J+FU X-Received: by 2002:a17:902:fa4c:b0:1c9:e48c:727a with SMTP id lb12-20020a170902fa4c00b001c9e48c727amr10837224plb.14.1698083192129; Mon, 23 Oct 2023 10:46:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698083192; cv=none; d=google.com; s=arc-20160816; b=BZyRrCaIgo2wmCxAOV8V4RZeYHGSL6A74lzVPBcPSX6mxUcpEUhn+z73D21kMfCVKP i8/tMplqGJekjNCGp5/t+wUDSxAwICImVpS2cXb48DUB40O5R9esOo4rNYxdh3/z66LI JrDWuGM0b57vr9IDdw489Qdudyv5iESKCosop/+9Uk62U3Zx58tEcCg5Y4dxHk8PR1Bm 4RnlRTELkoA28qBNC6BXn0jUBrPSZs3q+BpPLod10W8RNbrZOMg7wPcLE+ButsZQdOff kh49Bb6FFNsAm59bVgkHb0NG4enF37mlSX95SL/SekPaNTjPdHL8itc8e/2FQgaWyie6 acFg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=NDGTOLMAeVfRdTfpmq9bGrERea/cqueXfKjydSaTQPE=; fh=7V01jAiRby0QRae4s7inyu9tQh+lAAddt7G9BJLL+KM=; b=ikDBRo+T9ARoegp4WyttcgjSk1kuOEMltwUY+hGr/R6fx1oZ7gRTfmy44IlDfejzkz QvGc6KglBpkc/Pi8zWfMdmQwJP7ZL2CfpEj1rCbJxMT0SUIRsnuCIznOmkjZddkV7Fma MKZOATruhFjZRi8ncmw58YwblsQE64TymyS8pPfLQptNrazWd05r7YmHF51HI2oYqQL6 hkB7WnAr/pbTigjcnEY5Wn0nwGFrm/KlIXd63dJG1w5NrVDUcbNK9ZwSCaxUDvtzz4z7 nAa42jdyAXIfAZDiT/g/ryP/HB2a1J3tXo2Cq65FlSZ/eUck61mZJ7C3j4io/0624Gdn TINw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=q5sZlBXB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from howler.vger.email (howler.vger.email. [2620:137:e000::3:4]) by mx.google.com with ESMTPS id az12-20020a170902a58c00b001c9abee0d76si2563167plb.331.2023.10.23.10.46.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Oct 2023 10:46:32 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) client-ip=2620:137:e000::3:4; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=q5sZlBXB; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:4 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by howler.vger.email (Postfix) with ESMTP id 08275806E155; Mon, 23 Oct 2023 10:46:29 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at howler.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234027AbjJWRpi (ORCPT + 27 others); Mon, 23 Oct 2023 13:45:38 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:54854 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230053AbjJWRp2 (ORCPT ); Mon, 23 Oct 2023 13:45:28 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 21A1AB0 for ; Mon, 23 Oct 2023 10:45:26 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 754EBC433C8; Mon, 23 Oct 2023 17:45:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698083125; bh=X2EiXljEqLgjkMvgVksP7BUN5cbAO2JI6oZUqCn5eWA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=q5sZlBXBs5Iog9qQoDZ2/bLkWFr3eeiiWVLVSZ+sI7fj7xIIRbHUoWbq2iHyPy76w wc88r56+X9avGXu+OMTWHjzXYfpfBL610QgzkF899uZdDPH7s7n1846Siq42LNgHNH vJ+SgFDeIwPuHFNF4crhAnR5vLxKHOehoGgUTLp6Ja1E7VJiFSt9/iLj5WBEFWolsw OUnXCYwblWnSwgnFRinkG5ce/hAaLYppdnsCtd+OQDe06609TMIIaLOC7MhP13nMhH dQFc2UqAd5c8HVXPZNRrL2nzk4IS30mWZuAOICUKr9QnFaCkWw4YU+IQ30qXUph4r9 t5Sa6AK8jlnMQ== From: Miguel Ojeda To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , Peter Zijlstra , Josh Poimboeuf Cc: Miguel Ojeda , Wedson Almeida Filho , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , x86@kernel.org, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev Subject: [PATCH 3/4] x86/rust: depend on !RETHUNK Date: Mon, 23 Oct 2023 19:44:47 +0200 Message-ID: <20231023174449.251550-3-ojeda@kernel.org> In-Reply-To: <20231023174449.251550-1-ojeda@kernel.org> References: <20231023174449.251550-1-ojeda@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on howler.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (howler.vger.email [0.0.0.0]); Mon, 23 Oct 2023 10:46:29 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1780569281356348312 X-GMAIL-MSGID: 1780569281356348312 The Rust compiler does not support the equivalent of `-mfunction-return=thunk-extern` yet [1]. Thus, currently, `objtool` warns about it, e.g.: samples/rust/rust_print.o: warning: objtool: _R...init+0xa5c: 'naked' return found in RETHUNK build The support in `rustc` for `-Zfunction-return` has been submitted and is being reviewed [2]. It adds the needed LLVM function attributes and, with it, I got a RETHUNK kernel build with Rust enabled that does not print the `objtool` related warnings, boots in QEMU and can load a kernel loadable module. In any case, until proper/complete support is added to `rustc`, make it a hard restriction until the mitigation is in place. This may have an impact for developers that may not need/care about the mitigation in the Rust side (e.g. Ubuntu offers Rust as a "technology preview" [3]), but given we are getting closer to having the first actual in-tree Rust kernel users, it seems like the right time to disallow it. This should also avoid confusion [4]. Link: https://github.com/rust-lang/rust/issues/116853 [1] Link: https://github.com/rust-lang/rust/pull/116892 [2] Link: https://lore.kernel.org/rust-for-linux/ZSQXqX2%2Flhf5ICZP@gpd/ [3] Link: https://lore.kernel.org/rust-for-linux/CANiq72n6DMeXQrgOzS_+3VdgNYAmpcnneAHJnZERUQhMExg+0A@mail.gmail.com/ [4] Signed-off-by: Miguel Ojeda Acked-by: Martin Rodriguez Reboredo --- init/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/init/Kconfig b/init/Kconfig index 6d35728b94b2..9452b4102b99 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -1889,6 +1889,7 @@ config RUST depends on !GCC_PLUGINS depends on !RANDSTRUCT depends on !DEBUG_INFO_BTF || PAHOLE_HAS_LANG_EXCLUDE + depends on !RETHUNK select CONSTRUCTORS help Enables Rust support in the kernel. From patchwork Mon Oct 23 17:44:48 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Miguel Ojeda X-Patchwork-Id: 157020 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:ce89:0:b0:403:3b70:6f57 with SMTP id p9csp1455474vqx; Mon, 23 Oct 2023 10:46:30 -0700 (PDT) X-Google-Smtp-Source: AGHT+IGYEP3AdynvdVF4vXJKAq8PhUA2jQYzKnH0JxNAX+HJ/Wh2wdt2pWH7wZWquBVuB3hQ8RYJ X-Received: by 2002:a17:903:110d:b0:1ca:d778:a9ce with SMTP id n13-20020a170903110d00b001cad778a9cemr5545094plh.38.1698083190208; Mon, 23 Oct 2023 10:46:30 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1698083190; cv=none; d=google.com; s=arc-20160816; b=oM58gpP0e+OGvD24trqJtRVZObkaziwwlj/RJguBN8IGysXTKDqD8I2V71hzouDxYI HvCK6nV0jxPuKFq6zfhIVl/eWYT5xQtdXvRaiOlEaSBMNw10Tn4fJrEaM41jYS6AI6Lf o0zMx1mVSzGBhfb+QYLyH6VFpnsZi5RTH4XoVUC1zqUVtuQMetx9NunhmIPJSsNr8ack GHu7RXLV38br2a9OWFO15/FH373Wt0JUIGlATkwMiVMHo04TQ5ZkHFGdWTxas4yF5MJ/ cYZsSRL1FZsL9opUCohf7y5Ga4a1ItUmj8C673948PgkamX1QUpytJixlo4X1dXHz2tM NEAg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=dOJY6bO9As4CO3CFtLs/Ci2X9Wcd7xeqIbJnbayxUQM=; fh=jroPNv4S+L0mfk/vaQ2sne4kTYgkQFJ83bRXyGX7kv4=; b=g1rAyhuGGTOZMbYow6V2Bb2nqQNBcRJ/IwvvUM60ucbg/5XRSaZRBzAdtR64+WazBj kRRKZyAn0d+LAo0UAyZjDr3a+sS3miExXiNglJJIYHO2zvxkm2yAtjbq2W7ad5+SjzH9 rH6hy6JDl41fQUAJqw97pt5jK86WG8iCSAe468FWnEKL/EwAxMXSJ4Hr8nQBrpNNIMBK l3gEcAS8MOUp8Qq16f/KffvVliuehETr0Rt3ISZSa2B2BI20AQQFmvVHEmEIfnQ8mNoS hXU+Y04kzvBS56uxcU3dCLx/GvyhquemJ+PTqIP6XRhh9wmfXtsca1rZ7FpbYTH8ODJp HZPw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=NBorsQHM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from snail.vger.email (snail.vger.email. [2620:137:e000::3:7]) by mx.google.com with ESMTPS id a14-20020a1709027d8e00b001c61817e049si6593463plm.67.2023.10.23.10.46.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 23 Oct 2023 10:46:30 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) client-ip=2620:137:e000::3:7; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=NBorsQHM; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:7 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by snail.vger.email (Postfix) with ESMTP id 6A5CE80B1D36; Mon, 23 Oct 2023 10:46:29 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at snail.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230080AbjJWRqQ (ORCPT + 27 others); Mon, 23 Oct 2023 13:46:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48022 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233993AbjJWRpd (ORCPT ); Mon, 23 Oct 2023 13:45:33 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 47DA010C3 for ; Mon, 23 Oct 2023 10:45:31 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 62D5AC433C9; Mon, 23 Oct 2023 17:45:26 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1698083130; bh=OTtEvmCKMm7ojlLCYfNOXX7WV2Av9drz4oNtw+8PMlU=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=NBorsQHMmnAu6kmE5ZXnl/NeCJl1/ssPb1p3rjG7224RgRmP4RRgELONe6e9SKZ3y aEg8OPmzcybUoSAXG5o0vw80EQ0ebbRjPyZpqQw9CzDZib222bjnXMvXNf7j48uY/e 6YmKBSJscijZqMPNdjeDAnR9TFLxbdGYFZOM2XsY4eUNwbdZhB9UHr+K33sDiePSYe IWM/f80LtwdlHNLMMpz9Wnn0QxeVS+78vi64HdOdEvKEgifB7PNOz/n1LGpjgalS5m B0Wxb5Xvb9NNAFf7N7P6izCO4JbGedwTX3467RVNYqwyBOtEWJtAqN13b0s7o9X/HZ QtY8nfCBWF+lA== From: Miguel Ojeda To: Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , Peter Zijlstra , Josh Poimboeuf Cc: Miguel Ojeda , Wedson Almeida Filho , Alex Gaynor , Boqun Feng , Gary Guo , =?utf-8?q?Bj=C3=B6rn_Roy_Baron?= , Benno Lossin , Andreas Hindborg , Alice Ryhl , x86@kernel.org, rust-for-linux@vger.kernel.org, linux-kernel@vger.kernel.org, patches@lists.linux.dev, "H. Peter Anvin" Subject: [RFC PATCH 4/4] x86/rust: support RETHUNK Date: Mon, 23 Oct 2023 19:44:48 +0200 Message-ID: <20231023174449.251550-4-ojeda@kernel.org> In-Reply-To: <20231023174449.251550-1-ojeda@kernel.org> References: <20231023174449.251550-1-ojeda@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, SPF_HELO_NONE,SPF_PASS autolearn=ham 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 X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (snail.vger.email [0.0.0.0]); Mon, 23 Oct 2023 10:46:29 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1780569278974782019 X-GMAIL-MSGID: 1780569278974782019 When support for `-Zfunction-return` lands in Rust [1], this patch may be used to enable RETHUNK support on top of the previous patch. Link: https://github.com/rust-lang/rust/pull/116892 [1] Signed-off-by: Miguel Ojeda --- Note that this patch is not meant to be applied now, it is only here to show what will be needed to drop the depends on from the previous patch. arch/x86/Makefile | 5 +++++ init/Kconfig | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) -- 2.42.0 diff --git a/arch/x86/Makefile b/arch/x86/Makefile index 3df7c7c81918..818fdb1a92c5 100644 --- a/arch/x86/Makefile +++ b/arch/x86/Makefile @@ -24,11 +24,15 @@ RETPOLINE_CFLAGS += $(call cc-option,-mindirect-branch-cs-prefix) ifdef CONFIG_RETHUNK RETHUNK_CFLAGS := -mfunction-return=thunk-extern +RETHUNK_RUSTFLAGS := -Zfunction-return=thunk-extern RETPOLINE_CFLAGS += $(RETHUNK_CFLAGS) +RETPOLINE_RUSTFLAGS += $(RETHUNK_RUSTFLAGS) endif export RETHUNK_CFLAGS +export RETHUNK_RUSTFLAGS export RETPOLINE_CFLAGS +export RETPOLINE_RUSTFLAGS export RETPOLINE_VDSO_CFLAGS # For gcc stack alignment is specified with -mpreferred-stack-boundary, @@ -193,6 +197,7 @@ KBUILD_CFLAGS += -fno-asynchronous-unwind-tables # Avoid indirect branches in kernel to deal with Spectre ifdef CONFIG_RETPOLINE KBUILD_CFLAGS += $(RETPOLINE_CFLAGS) + KBUILD_RUSTFLAGS += $(RETPOLINE_RUSTFLAGS) # Additionally, avoid generating expensive indirect jumps which # are subject to retpolines for small number of switch cases. # LLVM turns off jump table generation by default when under diff --git a/init/Kconfig b/init/Kconfig index 9452b4102b99..6d35728b94b2 100644 --- a/init/Kconfig +++ b/init/Kconfig @@ -1889,7 +1889,6 @@ config RUST depends on !GCC_PLUGINS depends on !RANDSTRUCT depends on !DEBUG_INFO_BTF || PAHOLE_HAS_LANG_EXCLUDE - depends on !RETHUNK select CONSTRUCTORS help Enables Rust support in the kernel.