CVE-2026-31650 Overview
CVE-2026-31650 is a use-after-free vulnerability [CWE-416] in the Linux kernel's vub300 MMC driver. The driver maintains an explicit reference count for the controller and its driver data. The last reference can be dropped after the driver has been unbound, leading to access of freed memory. The flaw stems from device-managed allocation of the controller, which conflicts with the driver's manual reference counting. A secondary issue ties the controller lifetime to the parent USB device rather than the interface, allowing memory leaks during probe deferral.
Critical Impact
A local attacker with the ability to trigger device disconnect or driver unbind events can exploit the use-after-free condition to corrupt kernel memory, potentially achieving privilege escalation.
Affected Products
- Linux Kernel version 6.17
- Linux Kernel 7.0 release candidates (rc1 through rc7)
- Systems using the vub300 MMC over USB driver
Discovery Timeline
- 2026-04-24 - CVE CVE-2026-31650 published to NVD
- 2026-04-27 - Last updated in NVD database
Technical Details for CVE-2026-31650
Vulnerability Analysis
The vub300 driver provides MMC/SD card host controller support over USB. The driver implements explicit reference counting on the controller structure and its associated driver data. This manual lifetime management conflicts with the use of device-managed (devm_*) allocation for the controller object.
When the driver is unbound from a device, the kernel's device-managed resource framework automatically releases memory tied to the device. However, the driver's reference counter may still hold logical references at that point. Subsequent dereferences of the controller pointer access memory that has already been freed by the devres framework, producing a classic use-after-free condition.
Root Cause
The root cause is a mismatch between two memory management models in the same code path. The controller allocation uses device-managed APIs, which free memory automatically on driver detach. The driver simultaneously maintains its own reference count expecting to control the object's lifetime explicitly. The fix reverts the allocation to a non-managed equivalent so that releases occur only when the reference count reaches zero.
Attack Vector
Exploitation requires local access and the ability to trigger driver unbind or USB disconnect events on a system with the vub300 module loaded. An attacker who controls or simulates a vub300-compatible USB device can induce probe deferral or disconnect sequences. Successful exploitation can corrupt kernel heap memory and lead to escalation of privilege or denial of service. The vulnerability scope is constrained to systems where the affected driver is loaded.
No public proof-of-concept is available, and the issue is not listed in the CISA Known Exploited Vulnerabilities catalog.
Detection Methods for CVE-2026-31650
Indicators of Compromise
- Kernel oops or panic messages referencing vub300 symbols in dmesg or /var/log/kern.log
- KASAN reports flagging use-after-free in MMC subsystem call paths during USB disconnect events
- Unexpected driver unbind or rebind cycles for vub300-class devices
Detection Strategies
- Enable Kernel Address Sanitizer (KASAN) in test environments to catch use-after-free conditions during fuzz testing of USB device hotplug
- Inventory running kernels against the affected version ranges (6.17 and 7.0-rc1 through rc7) using package management telemetry
- Audit loaded kernel modules with lsmod | grep vub300 across the fleet to identify exposed hosts
Monitoring Recommendations
- Forward kernel ring buffer logs to a central log store and alert on oops or BUG entries that include vub300 or mmc_host
- Monitor USB subsystem events for repeated bind/unbind sequences that could indicate exploitation attempts
- Track kernel version drift to detect hosts running unpatched 6.17 or 7.0 release-candidate builds
How to Mitigate CVE-2026-31650
Immediate Actions Required
- Apply the upstream stable kernel patches referenced in the Kernel.org commit ef0448c5, commit ea7468f6, and commit 8f4d20a7
- Upgrade to a kernel build that incorporates the fix reverting vub300 controller allocation to non-managed memory
- Restrict physical USB access on systems where the vub300 driver is loaded and cannot be immediately patched
Patch Information
The fix reverts the controller allocation in the vub300 driver from device-managed (devm_*) APIs to standard kzalloc-style allocation. This ensures the controller object is freed only when the driver's explicit reference count reaches zero, resolving both the use-after-free on disconnect and the related lifetime mismatch with the USB interface. Patches are available in the mainline and stable trees via the kernel.org commits listed above.
Workarounds
- Blacklist the vub300 kernel module on systems that do not require vub300 MMC-over-USB functionality
- Unload the module at runtime with rmmod vub300 and add it to /etc/modprobe.d/blacklist.conf to prevent autoload
- Apply USB device authorization policies to deny unknown vub300-class devices from binding to the driver
# Configuration example: blacklist the vub300 module
echo 'blacklist vub300' | sudo tee /etc/modprobe.d/blacklist-vub300.conf
sudo rmmod vub300 2>/dev/null || true
sudo update-initramfs -u
Disclaimer: This content was generated using AI. While we strive for accuracy, please verify critical information with official sources.

