CVE-2026-89570 Overview
CVE-2026-89570 is a use-after-free and NULL pointer dereference vulnerability in the Linux kernel's Compute Express Link (CXL) Machine Check Exception (MCE) notifier. The flaw stems from incorrect lifetime management of the MCE notifier, which was registered per memory device and stored in struct cxl_memdev_state rather than being scoped to the region state that it actually requires. The vulnerability affects the CXL memory subsystem where the MCE handler operates. Local attackers with low privileges can trigger memory corruption in kernel space, leading to potential privilege escalation or system compromise.
Critical Impact
Local attackers can exploit the MCE notifier lifetime issue to trigger use-after-free or NULL pointer dereference conditions in the Linux kernel, resulting in high impact to confidentiality, integrity, and availability.
Affected Products
- Linux kernel with CXL (Compute Express Link) support enabled
- Systems using CXL memory devices with extended linear cache regions
- Kernel builds registering the CXL MCE notifier via cxl_memdev_state
Discovery Timeline
- Vulnerability reported by Flavien Solt
- 2026-09-11 - CVE-2026-89570 published to NVD
- 2026-09-13 - Last updated in NVD database
Technical Details for CVE-2026-89570
Vulnerability Analysis
The vulnerability resides in the CXL MCE notifier subsystem of the Linux kernel. The notifier was originally registered on a per-memory-device basis and stored inside struct cxl_memdev_state. However, the notifier only requires region-scoped state, specifically the region's System Physical Address (SPA) range and its extended linear cache size. This mismatch between the notifier's registration scope and its actual data dependency creates lifetime management errors.
When the memory device or endpoint is torn down while the notifier remains active, the MCE handler can dereference freed memory or NULL pointers. The upstream fix moves the notifier into struct cxl_region and registers it from cxl_region_probe(), aligning the notifier lifetime with the region lifetime. The patch also restricts registration to regions that possess an extended linear cache, which is the only supported use case. The function cxl_port_get_spa_cache_alias() was removed as dead code following the refactor.
Root Cause
The root cause is improper object lifetime management [CWE-416]. The MCE notifier was tied to the memory device state, but the handler only needed region state. When the underlying memory device or endpoint was released, the notifier and its dependent pointers were not properly synchronized, producing use-after-free and NULL dereference conditions in the MCE path.
Attack Vector
Exploitation requires local access with low privileges on a system that has CXL memory hardware and the vulnerable kernel configuration. An attacker must trigger conditions that invoke the MCE handler while the memory device or endpoint lifetime state is inconsistent with the notifier state. Successful exploitation can corrupt kernel memory, disclose sensitive kernel data, or crash the host.
No verified public proof-of-concept code is available. See the upstream commits 491d8c9, 5563db1, and 775d0f4 for technical details of the fix.
Detection Methods for CVE-2026-89570
Indicators of Compromise
- Kernel oops or panic messages referencing the CXL MCE notifier call chain or cxl_memdev_state
- Unexpected NULL pointer dereference traces originating from MCE handling paths on hosts with CXL memory
- Warnings from dev_warn() in CXL region probe paths when the notifier fails to register
Detection Strategies
- Audit installed kernel versions across Linux fleets and compare against patched stable releases containing the referenced commits
- Correlate kernel crash telemetry with hosts that expose CXL memory devices and have extended linear cache regions configured
- Monitor /var/log/kern.log, /var/log/messages, and journal entries for MCE-related stack traces during device hot-remove or region teardown events
Monitoring Recommendations
- Collect kernel logs centrally and alert on MCE handler faults or use-after-free signatures in CXL code paths
- Track kernel package versions using configuration management data to identify unpatched hosts
- Watch for unscheduled reboots or kernel crashes on servers equipped with CXL memory hardware
How to Mitigate CVE-2026-89570
Immediate Actions Required
- Apply the upstream Linux kernel patches referenced in the stable tree commits as soon as vendor-supported builds are available
- Inventory servers that expose CXL memory devices and prioritize those systems for patching
- Restrict local shell access to trusted administrators on hosts where the vulnerable kernel is still running
Patch Information
The fix is delivered through the following upstream Linux kernel commits: 491d8c9, 5563db1, and 775d0f4. The patches move the MCE notifier from struct cxl_memdev_state into struct cxl_region, register it from cxl_region_probe() only for regions with an extended linear cache, and remove the now-unused cxl_port_get_spa_cache_alias() helper. Consume the fix by upgrading to a distribution kernel that incorporates these commits.
Workarounds
- Disable CXL support in the kernel configuration on hosts that do not require CXL memory functionality
- Avoid enabling extended linear cache regions on CXL memory until a patched kernel is deployed
- Enforce least privilege on local user accounts to reduce the population of principals capable of triggering the vulnerable code path
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

