Commit fc582dfc authored by Miguel Ojeda's avatar Miguel Ojeda

x86/rust: support MITIGATION_SLS

Support `MITIGATION_SLS` by enabling the target features that Clang does.

Without this, `objtool` would complain if enabled for Rust, e.g.:

    rust/core.o: warning: objtool:
    _R...next_up+0x44: missing int3 after ret

These should be eventually enabled via `-Ctarget-feature` when `rustc`
starts recognizing them (or via a new dedicated flag) [1].

Link: https://github.com/rust-lang/rust/issues/116851 [1]
Reviewed-by: default avatarGary Guo <gary@garyguo.net>
Tested-by: default avatarAlice Ryhl <aliceryhl@google.com>
Tested-by: default avatarBenno Lossin <benno.lossin@proton.me>
Link: https://lore.kernel.org/r/20240725183325.122827-5-ojeda@kernel.orgSigned-off-by: default avatarMiguel Ojeda <ojeda@kernel.org>
parent d7868550
...@@ -173,6 +173,14 @@ fn main() { ...@@ -173,6 +173,14 @@ fn main() {
features += ",+retpoline-indirect-branches"; features += ",+retpoline-indirect-branches";
features += ",+retpoline-indirect-calls"; features += ",+retpoline-indirect-calls";
} }
if cfg.has("MITIGATION_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("features", features);
ts.push("llvm-target", "x86_64-linux-gnu"); ts.push("llvm-target", "x86_64-linux-gnu");
ts.push("target-pointer-width", "64"); ts.push("target-pointer-width", "64");
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment