Re: [PATCH] rust: arm64: set uwtable llvm module flag for CONFIG_UNWIND_TABLES

From: Miguel Ojeda

Date: Sat May 30 2026 - 03:41:26 EST


On Wed, May 27, 2026 at 8:18 PM Alice Ryhl <aliceryhl@xxxxxxxxxx> wrote:
>
> Due to a rustc bug [1] the -Cforce-unwind-tables=y flag only emits the
> uwtable annotation for functions, but not for the module. This means
> that compiler-generated functions such as 'asan.module_ctor' do not
> receive the uwtable annotation.
>
> When CONFIG_UNWIND_PATCH_PAC_INTO_SCS is enabled, this leads to boot
> failures because the dwarf information emitted for the kasan
> constructors is wrong, which causes the SCS boot patching code to
> patch the constructor in an illegal manner. Specifically, the paciasp
> instruction is patched, but the autiasp instruction is not. This
> mismatch leads to a crash when the constructor is called during boot.
>
> ==================================================================
> BUG: KASAN: global-out-of-bounds in do_basic_setup+0x4c/0x90
> Read of size 8 at addr ffffffe3cc7eb488 by task swapper/0/1
>
> Specifically the faulting instruction is the (*fn)() to invoke the
> constructor in do_ctors() of the init/main.c file.
>
> Once the fix lands in rustc, this flag can be made conditional on the
> rustc version. Note that passing the flag on a rustc with the fix
> present has no effect.
>
> Fixes: d077242d68a3 ("rust: support for shadow call stack sanitizer")
> Cc: stable@xxxxxxxxxx
> Link: https://github.com/rust-lang/rust/pull/156980 [1]
> Reported-by: Bo Ye <bo.ye@xxxxxxxxxxxx>
> Debugged-by: Isaac Manjarres <isaacmanjarres@xxxxxxxxxx>
> Debugged-by: Sami Tolvanen <samitolvanen@xxxxxxxxxx>
> Tested-by: Isaac Manjarres <isaacmanjarres@xxxxxxxxxx>
> Signed-off-by: Alice Ryhl <aliceryhl@xxxxxxxxxx>

Applied to `rust-fixes` -- thanks everyone!

[ The fix [1] has landed for Rust 1.98.0 (expected release on
2026-08-20).

Thus add a version check as discussed.

- Miguel ]

[ Adjusted link and comment. - Miguel ]

Cheers,
Miguel