CVE-2026-23316 Overview
A memory alignment vulnerability has been identified in the Linux kernel's IPv4 multipath hash seed implementation that can cause fatal kernel panics on ARM64 systems when compiled with Clang and Link Time Optimization (LTO) enabled. The vulnerability exists in the fib_multipath_hash_from_keys() function within the network subsystem, where improper memory access alignment triggers a strict Alignment Fault.
Critical Impact
This vulnerability can cause a complete kernel panic and system crash on affected ARM64 Linux systems, particularly those compiled with Clang LTO, leading to denial of service conditions.
Affected Products
- Linux kernel (ARM64 architecture)
- Linux kernel compiled with Clang and LTO enabled
- Systems using IPv4 multipath routing with hash seed functionality
Discovery Timeline
- 2026-03-25 - CVE CVE-2026-23316 published to NVD
- 2026-03-25 - Last updated in NVD database
Technical Details for CVE-2026-23316
Vulnerability Analysis
The vulnerability stems from a memory alignment issue in the struct sysctl_fib_multipath_hash_seed structure, which contains two u32 fields (user_seed and mp_seed). This creates an 8-byte structure with only a 4-byte alignment requirement. When the fib_multipath_hash_from_keys() function attempts to read this structure atomically using READ_ONCE(), it evaluates the entire struct at once.
Under normal GCC compilation, this operation silently works by falling back to unaligned regular loads, which the ARM64 kernel tolerates. However, when compiled with Clang and LTO enabled, the behavior changes dramatically due to commit e35123d83ee3 which strengthens READ_ONCE() to use Load-Acquire instructions (ldar / ldapr) to prevent compiler reordering bugs under Clang LTO.
Since the macro evaluates the full 8-byte struct, Clang emits a 64-bit ldar instruction. The ARM64 architecture strictly requires ldar to be naturally aligned to 8 bytes, but the structure only guarantees 4-byte alignment. Executing this instruction on a 4-byte aligned address triggers a strict Alignment Fault with Fault Status Code (FSC) = 0x21, resulting in a fatal kernel panic.
Additionally, analysis revealed that WRITE_ONCE() on the entire struct in proc_fib_multipath_hash_set_seed() is also flawed. Clang splits this 8-byte write into two separate 32-bit str instructions, which while avoiding an alignment fault, destroys atomicity and exposes a tear-write vulnerability that could lead to race conditions.
Root Cause
The root cause is the improper use of READ_ONCE() and WRITE_ONCE() macros on an 8-byte structure that only has 4-byte alignment. When ARM64 Load-Acquire semantics are enforced (as with Clang LTO builds), the 64-bit memory access operations require natural 8-byte alignment that the struct sysctl_fib_multipath_hash_seed does not guarantee.
Attack Vector
The vulnerability is triggered during normal kernel operation when processing IPv4 multipath routing decisions. While this is primarily a stability issue rather than a remotely exploitable vulnerability, it can be leveraged for denial of service attacks by:
- Triggering multipath hash calculations on affected ARM64 systems
- Causing kernel panics through legitimate network traffic that exercises the multipath routing code path
- Exploiting the tear-write vulnerability to cause race conditions in hash seed configuration
The fix involves moving the READ_ONCE() directly to the u32 member mp_seed, which emits a safe 32-bit ldar Wn instruction. The write operations are explicitly split into two 32-bit WRITE_ONCE() operations to maintain atomicity while avoiding alignment issues. A missing READ_ONCE() when reading user_seed in proc_fib_multipath_hash_seed() was also added to ensure proper pairing and concurrency safety.
Detection Methods for CVE-2026-23316
Indicators of Compromise
- Kernel panic messages containing alignment fault references (FSC = 0x21) on ARM64 systems
- System crashes occurring during IPv4 multipath routing operations
- Kernel oops or panic logs referencing fib_multipath_hash_from_keys() or related functions
- Unexpected system reboots on ARM64 servers running Clang LTO-compiled kernels
Detection Strategies
- Monitor kernel logs for alignment fault exceptions on ARM64 systems
- Implement crash dump analysis to identify panics originating from IPv4 multipath hash functions
- Track system stability metrics on ARM64 systems using Clang LTO-compiled kernels
- Review build configurations to identify affected kernel builds (Clang + LTO on ARM64)
Monitoring Recommendations
- Enable kernel panic logging and crash dump collection on all ARM64 systems
- Monitor for patterns of system instability correlated with multipath routing activity
- Implement automated alerting for alignment fault kernel messages
- Track kernel version and build configuration across ARM64 infrastructure
How to Mitigate CVE-2026-23316
Immediate Actions Required
- Identify all ARM64 systems running kernels compiled with Clang and LTO enabled
- Apply the security patches from the Linux kernel stable tree as soon as available
- Consider temporarily disabling multipath routing on critical ARM64 systems until patched
- Monitor affected systems for kernel panic events
Patch Information
The Linux kernel development team has released patches to address this vulnerability. The fix modifies the memory access patterns in the affected code:
- Moves READ_ONCE() directly to the u32 member to emit a safe 32-bit load instruction
- Explicitly splits write operations into two 32-bit WRITE_ONCE() operations
- Adds the missing READ_ONCE() for user_seed to ensure concurrency safety
Patches are available from the kernel stable tree:
Workarounds
- Recompile the kernel with GCC instead of Clang to avoid triggering the alignment fault
- Disable LTO compilation for affected kernel builds as a temporary mitigation
- Avoid using IPv4 multipath routing on affected ARM64 systems until patches are applied
- Consider using x86_64 systems for workloads requiring multipath routing until ARM64 systems are patched
# Check if your kernel was compiled with Clang LTO
cat /proc/version | grep -i clang
# Check kernel configuration for LTO
zcat /proc/config.gz | grep CONFIG_LTO
# Monitor for alignment faults in kernel logs
dmesg | grep -i "alignment fault"
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

