CVE-2026-31756Linux内核USB DWC2 Gadget驱动存在安全漏洞。`dwc2_hsotg_udc_stop`函数在调用`dwc2_gadget_exit_clock_gating`时未持有必要的自旋锁`hsotg->lock`。这导致锁状态不匹配,引发内核未定义行为及死锁,允许本地低权限攻击者使系统崩溃。
漏洞源于Linux内核`drivers/usb/dwc2/gadget.c`文件中的锁管理逻辑错误。`dwc2_gadget_exit_clock_gating`函数内部调用了`call_gadget`宏,该宏要求调用者必须预先持有`hsotg->lock`自旋锁,并在执行过程中进行解锁和重锁操作。然而,上游函数`dwc2_hsotg_udc_stop`在调用`dwc2_gadget_exit_clock_gating`之前并未获取该锁。这种锁的不匹配导致了两个严重后果:首先,内核在未持有锁的状态下执行`spin_unlock`,触发未定义行为;其次,`dwc2_gadget_exit_clock_gating`返回后,锁仍处于被持有状态,导致同一函数后续调用`spin_lock_irqsave`时发生死锁。本地攻击者可利用此缺陷触发系统崩溃。