]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
rust: KASAN+RETHUNK requires rustc 1.83.0
authorAlice Ryhl <aliceryhl@google.com>
Thu, 26 Sep 2024 09:38:49 +0000 (09:38 +0000)
committerMiguel Ojeda <ojeda@kernel.org>
Thu, 26 Sep 2024 19:27:27 +0000 (21:27 +0200)
When enabling both KASAN and RETHUNK, objtool emits the following
warnings:

    rust/core.o: warning: objtool: asan.module_ctor+0x13: 'naked' return found in MITIGATION_RETHUNK build
    rust/core.o: warning: objtool: asan.module_dtor+0x13: 'naked' return found in MITIGATION_RETHUNK build

This is caused by the -Zfunction-return=thunk-extern flag in rustc not
informing LLVM about the mitigation at the module level (it does so at
the function level only currently, which covers most cases, but both
are required), which means that the KASAN functions asan.module_ctor
and asan.module_dtor are generated without the rethunk mitigation.

The other mitigations that we enabled for Rust (SLS, RETPOLINE) do not
have the same bug, as they're being applied through the target-feature
functionality instead.

This is being fixed for rustc 1.83.0, so update Kconfig to reject this
configuration on older compilers.

Link: https://github.com/rust-lang/rust/pull/130824
Fixes: d7868550d573 ("x86/rust: support MITIGATION_RETHUNK")
Reported-by: Miguel Ojeda <ojeda@kernel.org>
Closes: https://lore.kernel.org/all/CANiq72myZL4_poCMuNFevtpYYc0V0embjSuKb7y=C+m3vVA_8g@mail.gmail.com/
Signed-off-by: Alice Ryhl <aliceryhl@google.com>
Link: https://lore.kernel.org/r/20240926093849.1192264-1-aliceryhl@google.com
[ Reworded to add the details mentioned in the list. - Miguel ]
Signed-off-by: Miguel Ojeda <ojeda@kernel.org>
init/Kconfig

index fa734a14458911223cb490389c3766c1268a6e30..9a2bcba426c5bbb5de75df95f487d66eb86b5da3 100644 (file)
@@ -1950,6 +1950,7 @@ config RUST
        select CFI_ICALL_NORMALIZE_INTEGERS if CFI_CLANG
        depends on !CALL_PADDING || RUSTC_VERSION >= 108100
        depends on !KASAN_SW_TAGS
+       depends on !(MITIGATION_RETHUNK && KASAN) || RUSTC_VERSION >= 108300
        help
          Enables Rust support in the kernel.