CVE-2026-23258 Overview
A memory leak vulnerability has been discovered in the Linux kernel's LiquidIO network driver (liquidio). The vulnerability exists in the setup_nic_devices() function where the network device structure (netdev) is allocated using alloc_etherdev_mq() but the pointer is not properly stored before queue setup operations, leading to a memory leak condition when error paths are triggered.
Critical Impact
If netif_set_real_num_rx_queues() or netif_set_real_num_tx_queues() fails, the allocated network device memory cannot be freed by the cleanup function liquidio_destroy_nic_device(), resulting in a kernel memory leak that could lead to resource exhaustion over time.
Affected Products
- Linux kernel with LiquidIO network driver enabled
- Systems using Cavium LiquidIO intelligent server adapters
- Multiple stable kernel branches (see patch commits)
Discovery Timeline
- 2026-03-18 - CVE CVE-2026-23258 published to NVD
- 2026-03-19 - Last updated in NVD database
Technical Details for CVE-2026-23258
Vulnerability Analysis
This vulnerability represents a Memory Leak condition in the Linux kernel's LiquidIO network driver. The issue stems from improper initialization ordering in the setup_nic_devices() function. When a network device is allocated using alloc_etherdev_mq(), the returned pointer should be immediately stored in a location accessible to cleanup routines. However, in the vulnerable code path, the pointer to oct->props[i].netdev is only assigned after calling queue setup functions.
The vulnerability was identified through static analysis tooling and code review. While the direct security impact is a memory leak rather than arbitrary code execution, sustained exploitation could lead to kernel memory exhaustion, potentially causing system instability or denial of service conditions on systems using LiquidIO network adapters.
Root Cause
The root cause is an improper initialization sequence in the setup_nic_devices() function. The network device pointer is stored in oct->props[i].netdev only after the calls to netif_set_real_num_rx_queues() and netif_set_real_num_tx_queues(). If either function fails before the pointer assignment, the error handling path returns without the ability to free the allocated netdev structure. The cleanup function liquidio_destroy_nic_device() relies on oct->props[i].netdev being non-NULL to locate and free the network device, but since it's still NULL at the point of failure, the allocated memory becomes orphaned.
Attack Vector
The attack vector for this vulnerability is local and requires specific conditions to trigger. An attacker would need the ability to cause the queue setup functions to fail, which could potentially be achieved through:
- Resource exhaustion scenarios where netif_set_real_num_rx_queues() or netif_set_real_num_tx_queues() cannot allocate required resources
- Repeated driver loading/unloading cycles under constrained memory conditions
- Manipulating system state to force error conditions during device initialization
The exploitation would result in gradual memory consumption as each failed initialization leaks a netdev structure. Over time, this could exhaust available kernel memory. The vulnerability was discovered through static analysis, and no active exploitation has been observed in the wild.
Detection Methods for CVE-2026-23258
Indicators of Compromise
- Gradual increase in kernel memory usage without corresponding process memory growth
- Memory allocation failures in kernel logs related to network subsystem
- LiquidIO driver initialization failures followed by memory pressure warnings
- Elevated MemFree depletion in /proc/meminfo on systems with LiquidIO hardware
Detection Strategies
- Monitor kernel logs for LiquidIO driver errors during initialization using dmesg | grep -i liquidio
- Implement memory monitoring with alerts for unusual kernel slab cache growth patterns
- Use kernel memory debugging tools like kmemleak to detect orphaned allocations
- Deploy SentinelOne Singularity agent for kernel-level anomaly detection and memory leak monitoring
Monitoring Recommendations
- Enable kernel memory debugging options (CONFIG_DEBUG_KMEMLEAK) in development and staging environments
- Configure system monitoring to alert on sustained kernel memory growth
- Implement automated health checks for LiquidIO adapter initialization status
- Use perf or ftrace to monitor setup_nic_devices() execution paths for failures
How to Mitigate CVE-2026-23258
Immediate Actions Required
- Apply the appropriate kernel patch from the stable branches listed in the external references
- If patching is not immediately possible, monitor system memory usage closely on affected systems
- Consider temporarily disabling the LiquidIO driver if the hardware is not critical to operations
- Plan maintenance windows for kernel updates on production systems with LiquidIO adapters
Patch Information
The fix involves initializing oct->props[i].netdev before calling the queue setup functions. This ensures that if netif_set_real_num_rx_queues() or netif_set_real_num_tx_queues() fails, the cleanup function can properly locate and free the allocated network device structure.
Multiple patch commits are available across different kernel stable branches:
- Kernel Git Commit 1d4590f
- Kernel Git Commit 926ede0
- Kernel Git Commit a0e57c0
- Kernel Git Commit be10964
- Kernel Git Commit c0ed6c7
- Kernel Git Commit c81a851
- Kernel Git Commit d028147
Workarounds
- Blacklist the liquidio kernel module if the hardware is not in use: echo "blacklist liquidio" >> /etc/modprobe.d/blacklist.conf
- Implement memory monitoring and automated system restarts when kernel memory reaches critical thresholds
- Use alternative network adapters if LiquidIO hardware can be substituted in the environment
- Schedule regular system reboots during maintenance windows to reclaim leaked memory on unpatched systems
# Configuration example
# Blacklist the liquidio driver if not needed
echo "blacklist liquidio" | sudo tee /etc/modprobe.d/liquidio-blacklist.conf
# Verify the module is not loaded
lsmod | grep liquidio
# If loaded, remove it (if not in use)
sudo modprobe -r liquidio
# Apply kernel update (example for Debian/Ubuntu)
sudo apt update && sudo apt upgrade linux-image-$(uname -r)
# Reboot to apply kernel patches
sudo reboot
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.


