CVE-2026-23166 Overview
A Null Pointer Dereference vulnerability has been identified in the Linux kernel's Intel E810 Ethernet Controller driver (ice). The vulnerability exists in the ice_vsi_set_napi_queues() function, which fails to properly validate pointer references before dereferencing them during system resume operations from suspend states.
When the system resumes from suspend (triggered via systemctl suspend or rtcwake), the ice driver attempts to access rings[q_idx]->q_vector without verifying that the pointer is valid. This results in a kernel NULL pointer dereference, causing a system crash and potential denial of service.
Critical Impact
System crashes during resume from suspend state affecting Intel E810 Ethernet Controller systems, impacting availability of network services and requiring manual system recovery.
Affected Products
- Linux kernel v6.18 with Intel ice driver
- Intel Ethernet Controller E810-XXV for SFP (Device ID: 8086:159b)
- Intel Ethernet Network Adapter E810-XXV-2 (Subsystem: 8086:4003)
Discovery Timeline
- 2026-02-14 - CVE CVE-2026-23166 published to NVD
- 2026-02-18 - Last updated in NVD database
Technical Details for CVE-2026-23166
Vulnerability Analysis
This vulnerability represents a classic NULL pointer dereference condition in kernel space, specifically within the Intel ice network driver's NAPI (New API) queue management code. The issue manifests during the power management resume path when the driver attempts to restore network interface state.
The kernel crash occurs in the netif_queue_set_napi() function, called from ice_vsi_set_napi_queues(), which is part of the ice_resume() power management handler. The crash log shows the instruction pointer at netif_queue_set_napi+0xa/0x170, attempting to read from address 0x0000000000000040 - an offset into a NULL pointer structure.
The vulnerability affects both SR-IOV enabled and disabled configurations, indicating the issue is in the core driver resume logic rather than virtualization-specific code paths. The faulting address offset (0x40) corresponds to a structure member access within the q_vector structure that hasn't been properly initialized during the resume sequence.
Root Cause
The root cause lies in the ice_vsi_set_napi_queues() function's failure to implement defensive NULL pointer checks before dereferencing the ring and q_vector pointers. During system resume from suspend, the driver's data structures may be in an inconsistent state where rings[q_idx] exists but its q_vector member has not yet been remapped or initialized.
The call trace reveals the execution path: suspend_devices_and_enter → dpm_resume → device_resume → pci_pm_resume → ice_resume → ice_vsi_set_napi_queues → netif_queue_set_napi. The crash occurs because the resume sequence attempts to configure NAPI queues before the underlying q_vector structures are fully restored.
Attack Vector
This vulnerability is triggered through local system operations, specifically by initiating a suspend-resume cycle on systems equipped with Intel E810 Ethernet Controllers. While the attack vector requires local access to trigger suspend operations, the vulnerability could be exploited in scenarios where:
The vulnerability does not require elevated privileges to trigger - any user capable of initiating system suspend (which is common on desktop and laptop systems) could potentially cause the crash. In server environments, this could affect scheduled suspend operations or power management automation scripts.
The crash results in a kernel oops with error code 0x0000 (not-present page), triggering the system's exception handler and potentially requiring a full system reboot to recover network functionality.
Detection Methods for CVE-2026-23166
Indicators of Compromise
- Kernel panic or oops messages containing ice_vsi_set_napi_queues in the call trace
- System crash logs showing NULL pointer dereference at address offset 0x0000000000000040
- netif_queue_set_napi appearing in kernel crash dumps during resume operations
- Unexpected system reboots or hangs immediately following suspend/resume cycles
Detection Strategies
- Monitor kernel logs (dmesg, /var/log/kern.log) for BUG messages referencing the ice driver during power state transitions
- Implement automated log analysis for patterns matching "kernel NULL pointer dereference" combined with "ice_resume"
- Deploy kernel crash dump collection (kdump/kexec) to capture full system state during failures
- Monitor PCI device resume errors specific to Intel E810 network adapters
Monitoring Recommendations
- Enable kernel debugging symbols and crash dump collection for systems with Intel E810 NICs
- Configure alerting for unexpected system restarts on affected server infrastructure
- Monitor network interface availability after scheduled maintenance windows involving suspend operations
- Track driver-specific events using the kernel tracepoint framework for the ice module
How to Mitigate CVE-2026-23166
Immediate Actions Required
- Apply the kernel patches referenced in the security commits immediately on affected systems
- Avoid using suspend/resume operations on production systems with Intel E810 controllers until patched
- Consider disabling automatic suspend policies on servers using affected network adapters
- Prepare rollback procedures in case of unexpected crashes during the patch deployment window
Patch Information
Patches have been committed to the stable kernel tree to address this vulnerability by adding defensive NULL pointer checks in the ice_vsi_set_napi_queues() function. The fix validates both the ring pointer and its associated q_vector member before attempting to dereference them.
The following kernel commits address this vulnerability:
System administrators should update to kernel versions containing these fixes or apply the patches to their current kernel build.
Workarounds
- Disable system suspend functionality on servers with Intel E810 network controllers as a temporary measure
- Configure power management policies to prevent automatic suspend on affected systems
- Use alternative power-saving mechanisms that don't trigger full suspend/resume cycles
- If suspend is required, consider temporarily unloading the ice driver module before suspend and reloading after resume
# Temporary workaround: Disable suspend on affected systems
sudo systemctl mask sleep.target suspend.target hibernate.target hybrid-sleep.target
# Alternative: Unload ice driver before suspend (manual approach)
sudo modprobe -r ice
# After resume:
sudo modprobe ice
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

