netconsole: take target_cleanup_list_lock in drop_netconsole_target()
- 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.111, 6.18.53
- 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
Summary
In the Linux kernel, the following vulnerability has been resolved: netconsole: take target_cleanup_list_lock in drop_netconsole_target() drop_netconsole_target() unlinks the target while only holding target_list_lock. However, when the underlying interface has been unregistered, netconsole_netdev_event() moves the target from target_list to target_cleanup_list, and netconsole_process_cleanups_core() walks that list under target_cleanup_list_lock only. If a user removes the configfs target at the same time the cleanup worker is iterating target_cleanup_list, list_del() can corrupt the list because the two paths take disjoint locks while operating on the same list node. Acquire target_cleanup_list_lock around the list_del() so the unlink is serialised against netconsole_process_cleanups_core() regardless of which list the target currently belongs to. The state transition that downgrades STATE_DEACTIVATED to STATE_DISABLED is left intact and is performed under the same combined locking, preserving the existing ordering with resume_target().
Timeline
- CVE published
- Record last updated
Affected versions
- Linux Linux
From 97714695ef904a4bdba75ca2f339215c0ae2b1fa · fixed in 84592ee22f7d1583ce33aa733411ff36c7a1c44c; From 97714695ef904a4bdba75ca2f339215c0ae2b1fa · fixed in fe8e6c0a2f28bdab14cdf7eff4dd9755d3793007; From 97714695ef904a4bdba75ca2f339215c0ae2b1fa · fixed in 91aeb87f052367a5a2743cc93777dfb4386f2f14
- Linux Linux
6.12
- KernelLinux
From 6.12.0 · fixed in 6.12.111; From 6.13.0 · fixed in 6.18.53