CVE-2026-31486CVE-2026-31486是Linux内核hwmon子系统中PMBus核心驱动的一个高危漏洞。由于调节器操作函数在访问共享数据及寄存器时未受互斥锁保护,引发了竞态条件风险。直接修复会导致死锁,因通知回调可能再次请求锁。此漏洞可能被本地低权限用户利用,导致系统可用性和完整性受损。官方通过重构通知机制,引入工作队列在锁外处理事件,从而消除了死锁隐患并保障了并发安全。
该漏洞位于Linux内核的drivers/hwmon/pmbus/pmbus_core.c文件中。问题核心在于pmbus_regulator_get_voltage、pmbus_regulator_set_voltage和pmbus_regulator_list_voltage这三个函数直接访问硬件寄存器及共享的数据结构,但没有使用update_lock互斥锁进行同步保护。在多线程并发环境下,这可能导致数据竞争,进而造成数据读取错误或设备控制异常。然而,简单的修复方案(直接添加互斥锁)会引入死锁风险。这是因为pmbus_regulator_notify函数通常在持有update_lock的上下文中被调用(例如在pmbus_fault_handler中)。如果此时通知回调链中的回调函数试图调用上述加锁后的电压操作函数,就会尝试再次获取已持有的锁,从而形成死锁。补丁采用了一种重构方案:修改pmbus_regulator_notify函数,使其不再直接在持有锁的情况下调用通知链,而是将待通知的事件存储在每页的原子位掩码中,并通过一个工作队列(worker)异步处理。