CVE-2026-53346: Linux Kernel ARM64 Boot Failure with Rust Unwinding Tables
A flaw in how the Linux kernel's Rust compiler toolchain handles unwinding information for ARM64 systems can cause boot failures when certain kernel security features are enabled. Specifically, when the kernel is built with both Rust support and address sanitizer (KASAN) constructor patching enabled, compiler-generated initialization functions may be patched incorrectly, leading to a crash during system startup. The issue stems from a rustc compiler bug where the unwind table flag is not properly applied to all generated functions, only to explicitly declared ones.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 7.1 HIGH · CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
- Weaknesses (CWE)
- CWE-125
- Affected products
- 7 configuration(s)
- Published / Modified
- 2026-07-01 / 2026-07-22
NVD description (verbatim)
In the Linux kernel, the following vulnerability has been resolved: rust: arm64: set uwtable llvm module flag for CONFIG_UNWIND_TABLES 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. [ 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 ]
4 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
CVE-2026-53346 involves a rustc bug affecting ARM64 Linux kernel builds with CONFIG_UNWIND_TABLES enabled. The -Cforce-unwind-tables=y compiler flag fails to emit the uwtable annotation for compiler-generated functions like 'asan.module_ctor'. When CONFIG_UNWIND_PATCH_PAC_INTO_SCS is active, the SCS (Shadow Call Stack) boot-time patching code relies on accurate DWARF unwinding information. Missing uwtable annotations cause the patching logic to asymmetrically apply PAC (Pointer Authentication Code) instructions—specifically, paciasp is patched but autiasp is not. This mismatch violates ARM64 PAC semantics and triggers a fault when the constructor executes during do_ctors() in init/main.c. The vulnerability is classified as CWE-125 (Out-of-bounds Read) because the incorrect DWARF data leads to memory access violations. The fix has landed in Rust 1.98.0 (expected 2026-08-20); kernel maintainers have added version checks to conditionally apply the workaround flag only on affected rustc versions.
Business impact
Systems running Linux kernel builds compiled with Rust support, KASAN enabled, and PAC-into-SCS patching active will experience boot failures, effectively rendering the system unusable until the kernel is rebuilt or upgraded. This affects embedded systems, cloud infrastructure, and edge deployments that rely on these security hardening features. The HIGH severity reflects the denial-of-service impact: affected systems cannot boot, not a runtime memory safety failure that might be exploitable from user space. Organizations using Rust-based kernel builds for security-critical deployments should prioritize updates.
Affected systems
Linux kernel versions built with Rust support (requires CONFIG_RUST=y) and ARM64 architecture, specifically when both CONFIG_UNWIND_TABLES and CONFIG_UNWIND_PATCH_PAC_INTO_SCS are enabled. The vulnerability manifests only at boot time, so it affects systems attempting to start with such configurations. Older rustc versions prior to the fix landing in 1.98.0 are affected; note that the kernel can ship workaround flags that have no effect on already-fixed rustc versions, ensuring forward compatibility.
Exploitability
This vulnerability cannot be exploited by an attacker to gain unauthorized access or escalate privileges; it is a build-time and boot-time issue that prevents the system from starting rather than creating a runtime security gap. No CVE entry exists in the KEV catalog (actively exploited vulnerabilities), and no public exploit code exists because the mechanism is deterministic kernel initialization failure rather than a memory corruption primitive. However, the issue is 'trivially reproducible'—any attempt to boot a kernel with the affected configuration combination will crash, making it easy to detect if present and causing immediate operational impact.
Remediation
Apply kernel updates that include the fix, which conditionally applies the llvm uwtable module flag only when compiling with rustc versions prior to 1.98.0. Alternatively, disable CONFIG_UNWIND_PATCH_PAC_INTO_SCS or CONFIG_UNWIND_TABLES at compile time as a workaround if kernel updates are delayed. Upgrade rustc to version 1.98.0 or later when available (expected 2026-08-20), which resolves the underlying compiler bug and eliminates the need for the kernel-side workaround.
Patch guidance
Verify that your Linux kernel build includes the conditional uwtable flag fix by checking kernel commit history or release notes. If building your own kernel, ensure you are using rustc 1.98.0 or later, or apply the fix to conditionally enable -Cforce-unwind-tables=y for rustc versions before 1.98.0. Test your build on ARM64 hardware to confirm successful boot with CONFIG_UNWIND_PATCH_PAC_INTO_SCS enabled. Consult your distribution (Fedora, Ubuntu, Arch) or SoC vendor's kernel releases for backported patches if you cannot upgrade rustc immediately.
Detection guidance
If your system fails to boot with a fault in do_ctors() or references to asan.module_ctor in kernel logs, check your kernel config (cat /boot/config-$(uname -r)) for CONFIG_RUST=y, CONFIG_UNWIND_TABLES=y, and CONFIG_UNWIND_PATCH_PAC_INTO_SCS=y. Confirm the rustc version used to build the kernel (rustc --version) is prior to 1.98.0. Boot failure logs will show 'KASAN: global-out-of-bounds' or similar memory fault messages. This detection is passive (boot failure is the indicator) rather than requiring active scanning.
Why prioritize this
Although the CVSS score is 7.1 (HIGH), this is a boot-time denial-of-service rather than an exploitable memory corruption. Prioritize based on deployment: (1) If you run ARM64 systems with Rust kernel support and PAC-into-SCS hardening, this is a critical blocker—update immediately. (2) If you use standard distributions without Rust kernel modules, risk is minimal. (3) If you manually compile kernels, verify rustc version before building. The vulnerability does not create a window for privilege escalation or data theft but does prevent system operation, so SLAs for system availability should drive urgency.
Risk score, explained
The CVSS v3.1 vector CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H yields a score of 7.1 (HIGH). Attack Vector (Local) and Access Complexity (Low) reflect that the issue triggers on boot without network or user interaction. The requirement for local privilege level (PR:L) accounts for the need to compile and deploy a kernel, which typically requires administrative access. Confidentiality (High) and Availability (High) impact ratings likely stem from the broad potential of unwind table corruption; however, in this specific vulnerability, the impact manifests solely as boot failure (Availability), not information disclosure. The scope is Unchanged (local system only). The score appropriately reflects high operational severity, though the practical threat model is narrower than a typical HIGH-scored memory corruption bug.
Frequently asked questions
Will this affect my system if I run a standard Linux distribution like Ubuntu or Fedora?
Probably not. Standard distributions typically do not enable CONFIG_RUST=y in their default kernel configs, as Rust kernel support is still relatively new. This vulnerability primarily affects custom kernel builds, embedded systems, or distributions explicitly using Rust-based kernel modules. Check your kernel config to confirm.
What is the difference between this and a typical kernel memory safety bug?
This is not exploitable as a memory corruption primitive. It is a build-configuration issue that causes a deterministic boot failure when specific options are combined. Attackers cannot trigger it remotely or from user space; it must be present at compile time and manifests immediately on boot. It impacts availability, not confidentiality or integrity of running systems.
If I upgrade rustc to 1.98.0, do I need to rebuild my kernel?
Yes, you will need to recompile the kernel with the newer rustc version. The fix is embedded in the rustc compiler itself, not in the kernel source, so upgrading rustc alone will not patch an already-built kernel. Once you rebuild with rustc 1.98.0 or later, the workaround flag will have no effect, but the kernel will boot correctly because the underlying compiler bug is fixed.
Can I work around this without updating if I am stuck on an old rustc version?
Yes. You can rebuild your kernel with CONFIG_UNWIND_PATCH_PAC_INTO_SCS=n or CONFIG_UNWIND_TABLES=n (whichever is not critical for your use case) to avoid the problematic code path. However, this reduces security hardening. The proper fix is to upgrade rustc or apply the kernel patch that conditionally enables the uwtable flag only for affected rustc versions.
This analysis is based on public CVE data and Linux kernel commit information available as of 2026-07-22. The vulnerability does not appear in the CISA KEV catalog and is not known to be actively exploited. Rust 1.98.0 is expected to release 2026-08-20; verify actual availability before relying on that date. Consult your kernel vendor or distribution for specific patch availability and backport status. Testing in non-production environments is strongly recommended before deploying kernel updates to production systems. Source: NVD (public-domain), retrieved 2026-08-10. Analysis generated by SEC.co (claude-haiku-4-5).
Related vulnerabilities
- CVE-2026-10889HIGHCritical ANGLE Sandbox Escape in Google Chrome – Patch to 149.0.7827.53
- CVE-2026-10927HIGHChrome Sandbox Escape via Dawn Out-of-Bounds Read
- CVE-2026-10941HIGHSkia Out-of-Bounds Memory Vulnerability in Chrome – Urgent Patch Required
- CVE-2026-11015HIGHCritical Chrome WebGPU Out-of-Bounds Read Vulnerability
- CVE-2026-11077HIGHChrome Dawn Graphics Vulnerability – Sandbox Escape Risk
- CVE-2026-11091HIGHCritical Chrome Memory Corruption Vulnerability in Dawn Graphics Engine
- CVE-2026-11111HIGHChrome Out-of-Bounds Read in ANGLE Graphics Engine — Patch Guidance
- CVE-2026-11191HIGHOut-of-Bounds Memory Access in Chrome ANGLE Library