enic: fix tx_hang_reset use-after-free on device removal
- Published
- Last modified
- Where the record stands: published, rejected by its publisher, or superseded by another id.What do these mean? →
- published
- Whether CISA lists it in its Known Exploited Vulnerabilities catalog: proof that attackers are using it.What do these mean? →
- Not listed in CISA KEV
- Fix
- Fixed in 6.12.104, 6.18.45, 7.1.9
- Whether working attack code is public (Exploit-DB, Metasploit, Nuclei or GitHub). Public code makes attacks easier.What do these mean? →
- None on Exploit-DB, Metasploit or GitHub
- Exploitation: none
- Automatable: no
- Technical impact: total
Summary
In the Linux kernel, the following vulnerability has been resolved: enic: fix tx_hang_reset use-after-free on device removal enic_remove() cancels the reset and change_mtu_work items but does not cancel tx_hang_reset. A TX timeout that fires while the device is being removed can schedule enic_tx_hang_reset() so that it runs after free_netdev(), resulting in a use-after-free. cancel_work_sync() alone is not sufficient here: the still-live watchdog and notify paths can re-schedule these work items in the window between the cancel and unregister_netdev(). Use disable_work_sync(), which cancels the work and blocks any subsequent schedule_work() from requeuing it, and apply it to the reset and change_mtu_work items as well so the same requeue race is closed for all teardown work.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: no · Technical impact: total
- Record last updated
Affected versions
- Linux Linux
From 937317c7c1097aa878a5000e3aab616eb5c590c0 · fixed in 8619865f34fb3b130b567855382a5c4aadd522b9; From 937317c7c1097aa878a5000e3aab616eb5c590c0 · fixed in e506e704b74748ffd0e1c92a7453ca2a959f832b; From 937317c7c1097aa878a5000e3aab616eb5c590c0 · fixed in 4f3464fc6c1f26afc504fd525c574f2bc14c9d42; From 937317c7c1097aa878a5000e3aab616eb5c590c0 · fixed in ec680ea4ba1bca92a767fb7e7869758bfdd886e3
- Linux Linux
4.4
- KernelLinux
From 4.4.0 · fixed in 6.12.104; From 6.13.0 · fixed in 6.18.45; From 6.19.0 · fixed in 7.1.9