[PATCH] rust: KASAN+RETHUNK requires rustc 1.83.0

Alice Ryhl posted 1 patch 2 months ago
init/Kconfig | 1 +
1 file changed, 1 insertion(+)
[PATCH] rust: KASAN+RETHUNK requires rustc 1.83.0
Posted by Alice Ryhl 2 months ago
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
properly informing LLVM about the mitigation, 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>
---
 init/Kconfig | 1 +
 1 file changed, 1 insertion(+)

diff --git a/init/Kconfig b/init/Kconfig
index fa734a144589..9a2bcba426c5 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -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.
 
-- 
2.46.0.792.g87dc391469-goog
Re: [PATCH] rust: KASAN+RETHUNK requires rustc 1.83.0
Posted by Miguel Ojeda 2 months ago
On Thu, Sep 26, 2024 at 11:39 AM Alice Ryhl <aliceryhl@google.com> wrote:
>
> 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
> properly informing LLVM about the mitigation, 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>

Applied to `rust-fixes` -- thanks!

Cheers,
Miguel
Re: [PATCH] rust: KASAN+RETHUNK requires rustc 1.83.0
Posted by Miguel Ojeda 2 months ago
On Thu, Sep 26, 2024 at 11:39 AM Alice Ryhl <aliceryhl@google.com> wrote:
>
> This is caused by the -Zfunction-return=thunk-extern flag in rustc not
> properly informing LLVM about the mitigation, which means that the KASAN

"...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)" or similar?

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

Yeah, let's go with 1.83.0 as we said -- we can modify it if needed
later on. I think the PR is fairly straightforward so it should
probably land in that version unless there is an unknown unknown.

Thanks Alice, looks good to me.

I will take this one soon.

Cheers,
Miguel
Re: [PATCH] rust: KASAN+RETHUNK requires rustc 1.83.0
Posted by Alice Ryhl 2 months ago
On Thu, Sep 26, 2024 at 12:34 PM Miguel Ojeda
<miguel.ojeda.sandonis@gmail.com> wrote:
>
> On Thu, Sep 26, 2024 at 11:39 AM Alice Ryhl <aliceryhl@google.com> wrote:
> >
> > This is caused by the -Zfunction-return=thunk-extern flag in rustc not
> > properly informing LLVM about the mitigation, which means that the KASAN
>
> "...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)" or similar?

That phrasing SGTM.

> > This is being fixed for rustc 1.83.0, so update Kconfig to reject this
> > configuration on older compilers.
>
> Yeah, let's go with 1.83.0 as we said -- we can modify it if needed
> later on. I think the PR is fairly straightforward so it should
> probably land in that version unless there is an unknown unknown.
>
> Thanks Alice, looks good to me.
>
> I will take this one soon.

Thanks!

Alice