CVE-2026-43250Linux内核中的ChipIdea UDC驱动程序存在一个高危漏洞。该漏洞源于在USB设备断开连接时,_ep_nuke()函数未能正确清理DMA映射和分散-聚集(SG)缓冲区。当设备在活跃传输期间断开,请求对象中保留了过期的DMA状态。如果设备重新连接且gadget驱动程序重用这个未重置的请求,硬件将尝试使用无效的DMA地址,导致内存对齐错误、内存损坏,进而引发系统崩溃或潜在的权限提升。
漏洞发生在drivers/usb/chipidea/udc.c中的_ep_nuke()函数。正常流程中,请求通过_hardware_dequeue()完成时会调用usb_gadget_unmap_request_by_dev()进行清理。但在断开连接的异常流程中,_ep_nuke()直接返回请求,导致请求结构体中的num_mapped_sgs和sgt.sgl指针未被清零。当设备重连并复用这些请求时,_hardware_enqueue()检测到num_mapped_sgs非零,错误地跳过DMA映射步骤,直接引用已释放的物理地址。这会导致硬件访问非法内存区域,触发内核异常(OOPS)或被利用进行进一步的内核内存破坏攻击。