CVE-2026-31759Linux内核USB ULPI驱动组件存在双重释放漏洞。在`ulpi_register_interface()`的错误处理路径中,当`device_register()`调用失败时,代码逻辑首先调用`put_device()`触发释放回调,随后错误路径又执行`kfree()`再次释放同一内存块,导致内核崩溃或潜在的权限提升风险。
该漏洞源于Linux内核驱动/usb/ulpi/bus.c中的错误处理逻辑缺陷。具体而言,当`ulpi_register_interface()`函数执行`device_register(&ulpi->dev)`失败时,会进入错误处理分支。此时代码调用了`put_device(&ulpi->dev)`,这会触发`ulpi_dev_release()`回调函数,该函数负责释放OF节点引用并调用`kfree(ulpi)`释放内存。然而,随后的错误处理代码未检查内存状态,再次调用`kfree(ulpi)`,导致双重释放。本地低权限攻击者可利用此漏洞触发内核崩溃造成拒绝服务,或在特定条件下结合堆喷射技术篡改敏感内核数据结构,从而可能实现本地权限提升。