CVE-2026-31582Linux内核中的powerz驱动程序在处理USB设备断开连接时存在释放后使用(UAF)漏洞。当设备断开时,`powerz_disconnect`函数执行了URB内存释放,但由于竞态条件,随后的`powerz_read`调用可能在获取互斥锁后,再次访问已被释放的内存地址。这种逻辑缺陷导致系统稳定性受损,攻击者可利用此漏洞导致内核崩溃或潜在的权限提升。
该漏洞源于Linux内核`drivers/hwmon/powerz.c`驱动代码中对USB断开事件处理的竞态条件。具体而言,当USB设备触发断开连接时,`powerz_disconnect`函数会调用`usb_free_urb`释放`priv->urb`指向的内存块,并随后释放互斥锁。然而,关键问题在于代码未在释放前将`priv->urb`指针置为NULL,且`usb_set_intfdata`的调用时机晚于hwmon注册。此时,如果用户空间线程通过`hwmon`接口发起读取请求,`powerz_read`函数能够成功获取互斥锁并调用`powerz_read_data`。该函数会直接解引用`priv->urb`指针,导致对已释放内存的访问。这种释放后使用(UAF)行为可能导致内核恐慌,在特定条件下,精心构造的攻击者可能利用此漏洞实现本地权限提升,覆盖敏感内核数据结构。修复方案包括调整注册顺序及增加空指针检查。