io_uring: ensure ctx->rings is stable for task work flags manipulation
- 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.18.19, 6.19.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: io_uring: ensure ctx->rings is stable for task work flags manipulation If DEFER_TASKRUN | SETUP_TASKRUN is used and task work is added while the ring is being resized, it's possible for the OR'ing of IORING_SQ_TASKRUN to happen in the small window of swapping into the new rings and the old rings being freed. Prevent this by adding a 2nd ->rings pointer, ->rings_rcu, which is protected by RCU. The task work flags manipulation is inside RCU already, and if the resize ring freeing is done post an RCU synchronize, then there's no need to add locking to the fast path of task work additions. Note: this is only done for DEFER_TASKRUN, as that's the only setup mode that supports ring resizing. If this ever changes, then they too need to use the io_ctx_mark_taskrun() helper.
Timeline
- CVE published
- CISA SSVC assessment
Exploitation: none · Automatable: no · Technical impact: total
- Record last updated
Affected versions
- Linux Linux
From 79cfe9e59c2a12c3b3faeeefe38d23f3d8030972 · fixed in 7cc4530b3e952d4a5947e1e55d06620d8845d4f5; From 79cfe9e59c2a12c3b3faeeefe38d23f3d8030972 · fixed in 46dc07d5f31411cc023f3bf1f4a23a07bf6e0ed1; From 79cfe9e59c2a12c3b3faeeefe38d23f3d8030972 · fixed in 96189080265e6bb5dde3a4afbaf947af493e3f82
- Linux Linux
6.13
- KernelLinux
From 6.13.0 · fixed in 6.18.19; From 6.19.0 · fixed in 6.19.9