Linux: hwmon: (gpio-fan) Fix use-after-free in alarm work
What fixes it
- 594c62eea7c82f526054496e9fa9b895122a8016LinuxCVE List
- 6e67d9bdac810edacef78cbaeedd34445aa8ceb7LinuxCVE List
- 9b12bd724db9db318e3a68be17693583dc29a066LinuxCVE List
- 30755d3a5782cd704c8921cac8ee66dffe4383eaLinuxCVE List
A fixed version on one release line is not the upgrade target for every line. Check your exact version and any vendor backports.
Description
In the Linux kernel, the following vulnerability has been resolved:
hwmon: (gpio-fan) Fix use-after-free in alarm work
fan_alarm_irq_handler() queues fan_data->alarm_work, but nothing cancels it. fan_alarm_notify() dereferences fan_data and its hwmon device. On unbind, devres frees the interrupt, which only waits for the handler itself, and then releases the hwmon device and fan_data, so a pending fan_alarm_notify() can run after those frees.
Replace INIT_WORK() with devm_work_autocancel(), registered before devm_request_irq(). The devres cleanup then frees the interrupt first, so no new work can be queued, and cancels the work while fan_data and the hwmon device are still alive.
This issue was found by an in-house static analysis tool.
Text from CVE List
Affected versions 16
- Linuxaffected: d6fe1360f42e86262153927986dea6502daff703 before 594c62eea7c82f526054496e9fa9b895122a8016CVE List
- Linuxaffected: d6fe1360f42e86262153927986dea6502daff703 before 6e67d9bdac810edacef78cbaeedd34445aa8ceb7CVE List
- Linuxaffected: d6fe1360f42e86262153927986dea6502daff703 before e9fc7d53b2eb34c0a607d1659f49b46911aaf16cCVE List
- Linuxaffected: d6fe1360f42e86262153927986dea6502daff703 before 9b12bd724db9db318e3a68be17693583dc29a066CVE List
- Linuxaffected: d6fe1360f42e86262153927986dea6502daff703 before 30755d3a5782cd704c8921cac8ee66dffe4383eaCVE List
- Linuxaffected: d6fe1360f42e86262153927986dea6502daff703 before c6ab7f855891877a16d2e2ddf0cd0305fd098a85CVE List
- Linuxaffected: d6fe1360f42e86262153927986dea6502daff703 before a2471ed17b0e6ff7bfb6b2ea8e6e5b04c309d293CVE List
- Linuxaffected: 2.6.37CVE List
- Linuxunaffected: all versions before 2.6.37CVE List
- Linuxunaffected: 5.15.222 through 5.15.*CVE List
- Linuxunaffected: 6.1.189 through 6.1.*CVE List
- Linuxunaffected: 6.6.158 through 6.6.*CVE List
- Linuxunaffected: 6.12.111 through 6.12.*CVE List
- Linuxunaffected: 6.18.53 through 6.18.*CVE List
- Linuxunaffected: 7.2.7 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List
References 7
- git.kernel.org/stable/c/594c62eea7c82f526054496e9fa9b895122a8016Referencevia CVE List
- git.kernel.org/stable/c/6e67d9bdac810edacef78cbaeedd34445aa8ceb7Referencevia CVE List
- git.kernel.org/stable/c/e9fc7d53b2eb34c0a607d1659f49b46911aaf16cReferencevia CVE List
- git.kernel.org/stable/c/9b12bd724db9db318e3a68be17693583dc29a066Referencevia CVE List
- git.kernel.org/stable/c/30755d3a5782cd704c8921cac8ee66dffe4383eaReferencevia CVE List
- git.kernel.org/stable/c/c6ab7f855891877a16d2e2ddf0cd0305fd098a85Referencevia CVE List
- git.kernel.org/stable/c/a2471ed17b0e6ff7bfb6b2ea8e6e5b04c309d293Referencevia CVE List