CVE-2026-43357Linux内核中的mpu3050陀螺仪驱动程序存在一个安全漏洞,该漏洞源于对电源管理函数返回值的检查缺失。在设备尝试从低功耗状态唤醒时,驱动程序未能正确处理唤醒失败的情况,导致可能访问不可用的硬件资源。由于设备使用计数被错误地递增,这可能进一步导致资源管理混乱。本地低权限攻击者利用此漏洞可触发系统不稳定,导致拒绝服务。
该漏洞位于Linux内核的`drivers/iio/gyro/mpu3050-core.c`驱动文件中,涉及电源管理运行时(PM Runtime)的逻辑缺陷。具体而言,代码中调用了`pm_runtime_get_sync()`函数来唤醒设备,但未对返回值进行校验。当硬件设备由于某种原因(如总线错误或电源故障)无法从低功耗状态恢复时,该函数会返回负数错误码,但驱动程序忽略了这一错误,继续执行后续的硬件访问操作。这会导致对未就绪的硬件进行读写,从而引发系统崩溃或不可预测的行为。此外,`pm_runtime_get_sync()`的一个特性是无论操作成功与否,都会增加设备的usage count。在唤醒失败的场景下,这会导致引用计数泄漏,使得设备永远无法再次进入休眠状态,造成资源耗尽。漏洞修复采用了`pm_runtime_resume_and_get()`函数,该函数仅在唤醒成功时增加计数,并在失败时返回错误,从而解决了两个问题。同时,修复还在`preenable`失败路径中增加了`pm_runtime_put_autosuspend()`调用,确保资源正确释放。