Linux: net: airoha: npu: cancel wdt_work after releasing the WDT IRQ
What fixes it
- 4bdee8060d1e4581624e68fbd369b1afb14df4bcLinuxCVE 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:
net: airoha: npu: cancel wdt_work after releasing the WDT IRQ
airoha_npu_remove() calls cancel_work_sync() on each core's wdt_work, but the watchdog IRQ that queues it is requested with devm_request_irq() and is freed only after .remove() returns. airoha_npu_wdt_handler() can therefore schedule_work() again once the cancel has returned. struct airoha_npu, which contains the work, is devm_kzalloc()'d and is freed in that same unwind, so the late work dereferences freed memory.
Register the work with devm_work_autocancel() before devm_request_irq() and drop .remove(). Devres runs in reverse order, so the IRQ is freed before cancel_work_sync(), including when probe fails. A cancel left in .remove() cannot get that order. Initializing the work first also stops a pending watchdog interrupt from queuing an uninitialized work item. Probe currently calls INIT_WORK() only after devm_request_irq().
This issue was identified during our ongoing static-analysis research while reviewing kernel code.
Text from CVE List
Affected versions 8
- Linuxaffected: 23290c7bc190def4e1ca61610992d9b7c32e33f3 before aca91d8fa0ecbc990ebf9a688c684dda78a43c00CVE List
- Linuxaffected: 23290c7bc190def4e1ca61610992d9b7c32e33f3 before da9d42531f3a6dfea2e9c775b62a46185dbf280aCVE List
- Linuxaffected: 23290c7bc190def4e1ca61610992d9b7c32e33f3 before 4bdee8060d1e4581624e68fbd369b1afb14df4bcCVE List
- Linuxaffected: 6.15CVE List
- Linuxunaffected: all versions before 6.15CVE List
- Linuxunaffected: 6.18.55 through 6.18.*CVE List
- Linuxunaffected: 7.2.9 through 7.2.*CVE List
- Linuxunaffected: 7.3CVE List