CVE-2026-89568 Overview
CVE-2026-89568 is a Linux kernel vulnerability in the Kexec Handover (KHO) subsystem. The flaw resides in the kho_preserved_memory_reserve() function, which incorrectly calculates the size of memory preservations larger than 2 GiB. The function uses a 32-bit integer literal in a bit-shift operation, triggering undefined behavior when the shift exceeds 31 bits. Reservations obtained through kho_preserve_pages(), such as those from memblock reserve_mem, can exercise this path when properly aligned. The upstream Linux kernel maintainers have released fixes in commits 3a0b8fa and 42a6f03.
Critical Impact
Undefined behavior in kernel memory preservation calculations can corrupt handover state during kexec, leading to incorrect memory reservations across kernel transitions.
Affected Products
- Linux kernel versions containing the KHO subsystem with the flawed kho_preserved_memory_reserve() implementation
- Systems using kho_preserve_pages() with reservations larger than 2 GiB
- Configurations using memblock reserve_mem with large, aligned reservations
Discovery Timeline
- 2026-09-11 - CVE-2026-89568 published to NVD
- 2026-09-11 - Last updated in NVD database
Technical Details for CVE-2026-89568
Vulnerability Analysis
The vulnerability is an integer overflow in the Linux kernel's Kexec Handover (KHO) subsystem. The kho_preserved_memory_reserve() function computes the preservation size using the expression 1 << (order + PAGE_SHIFT). Because the literal 1 is treated as a 32-bit int, the shift operation is only defined for shift counts up to 31 bits. Any preservation whose combined order + PAGE_SHIFT exceeds 31 invokes C-language undefined behavior, corrupting the computed size.
Preservations larger than 2 GiB cannot currently be reached through folios. However, they are reachable through kho_preserve_pages(), which is used by the memblock reserve_mem interface. When callers request valid, properly aligned reservations above 2 GiB, the size calculation silently fails.
Root Cause
The root cause is an integer truncation error in a bit-shift expression. The literal 1 has type int, so 1 << N produces an int result. For values of order + PAGE_SHIFT at or above 32, the shift exceeds the width of the type, yielding undefined behavior rather than the intended 64-bit size. The corrected code substitutes the unsigned long literal 1UL, ensuring the shift produces a properly sized value on 64-bit platforms.
Attack Vector
Exploitation requires the ability to trigger a memory preservation larger than 2 GiB through KHO paths that invoke kho_preserve_pages(). This is typically driven by system configuration such as memblock reserve_mem parameters. The condition is a local, configuration-driven trigger rather than a remote network vector. The impact is corruption of kernel handover state during kexec transitions rather than direct code execution.
See the upstream fix in Kernel Git Commit 3a0b8fa and Kernel Git Commit 42a6f03 for technical details of the correction.
Detection Methods for CVE-2026-89568
Indicators of Compromise
- Unexpected kexec handover failures or kernel panics on systems configured with reserve_mem blocks larger than 2 GiB
- Discrepancies between requested and actually reserved memory regions across kexec transitions
- Kernel log entries from the KHO subsystem reporting inconsistent preservation sizes
Detection Strategies
- Inventory Linux hosts running kernels that include the KHO subsystem and identify those without the upstream fix commits 3a0b8fa or 42a6f03
- Audit boot parameters and memblock configurations for reserve_mem entries exceeding 2 GiB
- Correlate kexec transition events with subsequent memory subsystem errors in kernel ring buffer output
Monitoring Recommendations
- Collect and centralize dmesg output focused on KHO, kexec, and memblock subsystems for long-term analysis
- Track kernel version and patch state across the fleet to confirm remediation coverage
- Alert on kexec handover failures on hosts configured for large memory reservations
How to Mitigate CVE-2026-89568
Immediate Actions Required
- Identify Linux systems running kernels with the KHO subsystem and prioritize those using reserve_mem allocations above 2 GiB
- Apply the upstream kernel patches from commits 3a0b8fa and 42a6f03 through your distribution's stable kernel update channel
- Reboot affected systems after patching to ensure the corrected kho_preserved_memory_reserve() implementation is loaded
Patch Information
The fix replaces the 32-bit integer literal with 1UL, promoting the bit-shift operation to unsigned long width. This eliminates the undefined behavior for preservations larger than 2 GiB. Patches are available in Kernel Git Commit 3a0b8fa and Kernel Git Commit 42a6f03. Distribution maintainers should backport these commits to supported stable kernel branches.
Workarounds
- Constrain memblock reserve_mem and other kho_preserve_pages() callers so no single reservation exceeds 2 GiB until patches are applied
- Disable KHO-based kexec workflows on affected systems where operationally feasible
- Split large memory reservations into multiple smaller, individually aligned regions to avoid triggering the overflow path
# Verify running kernel version and inspect reserve_mem configuration
uname -r
cat /proc/cmdline | tr ' ' '\n' | grep -i reserve_mem
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

