CVE-2026-31721Linux内核USB HID gadget组件存在拒绝服务漏洞。漏洞原因是hidg_bind函数错误地重新初始化了仍在使用的等待队列。当用户按照特定顺序操作(绑定设备、打开hidg0、epoll添加、解绑重绑UDC、epoll删除)时,会触发内核列表删除损坏错误。此漏洞可导致本地低权限用户引发系统内核崩溃,严重影响系统可用性。
该漏洞位于Linux内核的USB HID gadget功能驱动中。问题核心在于资源生命周期管理不当。等待队列的初始化原位于hidg_bind函数中,这意味着每次UDC绑定时队列都会被重置。然而,队列的生命周期应与设备实例(hidg_alloc)一致。攻击者可利用以下步骤触发漏洞:首先配置并绑定HID gadget,然后打开/dev/hidg0设备文件,并通过epoll_ctl添加对该文件的监控。此时,等待队列中已存在等待项。接着,攻击者触发UDC的解绑与重新绑定。在重绑定过程中,bind函数重新初始化了队列头,导致之前的等待项指针失效。最后,当尝试通过epoll_ctl删除监控时,内核试图从队列中移除已失效的等待项,触发list_del corruption,导致内核恐慌。该漏洞被归类为竞态条件或逻辑错误,CVSS 3.1评分为5.5(中危),主要影响可用性。