KernelScan.io

HIGH

usb ULPI DoubleFree

CVE-2026-31759

CVSS 7.8 / 10.0 NVD

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H

KernelScan AI5.1MEDIUM

01

In the Linux kernel, the following vulnerability has been resolved: usb: ulpi: fix double free in ulpi_register_interface() error path When device_register() fails, ulpi_register() calls put_device() on ulpi->dev. The device release callback ulpi_dev_release() drops the OF node reference and frees ulpi, but the current error path in ulpi_register_interface() then calls kfree(ulpi) again, causing a double free. Let put_device() handle the cleanup through ulpi_dev_release() and avoid freeing ulpi again in ulpi_register_interface().

02

Engine v0.2.0

Risk summary

Attackers with physical access to the device PCB can trigger a double-free vulnerability in the USB ULPI interface registration error path. This corrupts the kernel heap allocator and leads to a kernel panic, resulting in denial of service. The bug is reachable through the on-board ULPI interface used by USB 2.0 PHYs.

Affecteddrivers/usb/common/ulpi.c (USB ULPI subsystem)

Vulnerability analysis

The vulnerability exists in ulpi_register_interface(). When device_register() fails, ulpi_register() calls put_device(), which invokes the ulpi_dev_release() callback to free the ulpi structure. The error path in ulpi_register_interface() then incorrectly calls kfree(ulpi) a second time, causing a double free. The fix removes the redundant kfree() so that put_device() alone handles cleanup. Because this is a heap corruption bug in the USB subsystem, it is reachable via the physical USB attack surface (on-board ULPI) and can corrupt the slab allocator freelist, with a direct availability impact from kernel panic.

03

BranchFixed inPatch commit
5.105.10.2532f70ba9dae13
5.155.15.203ee248e6e941e
6.16.1.168272a9b26c336
6.126.12.818763f8317bb3
6.186.18.2238c28fe25611
6.196.19.12a6e5461f076c
6.66.6.134aaeae6533d77
mainline7.001af542392b5