HIGH Introduced in 5.2
vfio_ccw IoMutex Race
CVE-2026-80548
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H
KernelScan AI7.7HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: s390/vfio_ccw: Selectively expand io_mutex The io_mutex was defined to serialize the io_regions, but then has also sort of been associated with the I/O themselves because of the close relationship they share. With the handful of races that are possible, the choices are either to: A) expand the scope of io_mutex to close these remaining windows, or B) reduce the scope of io_mutex to just io_region, and introduce a new lock mechanism for the remaining I/O resources This patch implements A, since B brings with it a lot more interactions that would need to be tracked and kept in a correct hierarchy. It also takes advantage of the workqueue element for cp_free() that now gets called out of fsm_notoper(), which could be invoked out of an interrupt context and thus cannot acquire a mutex itself.
02KernelScan AI Analysis
Risk summary
A race condition in the s390 vfio_ccw driver allows concurrent access to I/O resources and channel program lifecycle without proper synchronization, potentially leading to use-after-free or memory corruption. This is exploitable by a local user with access to a vfio-ccw device, typically in a virtualized or containerized s390 environment.
Vulnerability analysis
The driver used a single lock to protect I/O region updates, but that lock did not cover the full lifecycle of active channel programs. This left windows where interrupt handlers, background work items, and userspace operations could touch the same data structures simultaneously. One path could release memory backing an active channel program while another path was still walking those structures, leading to use-after-free or corruption. The fix widens the lock coverage to guard the entire channel program lifecycle and all related I/O resources, and moves cleanup work that previously ran in interrupt context onto a workqueue so it can safely synchronize with other operations. A local process with access to the passthrough device can reach the race, which on this architecture typically means a virtual-machine guest or a container granted channel-I/O passthrough.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 7.1 | 5.2 | 7.1.10 | 2a5ac0c0f1f7 |
| mainline | 5.2 | 7.2 | 34f4feff3e90 |
| 6.1 | 5.2 | 6.1.185 | 56d7488533ce |
| 6.18 | 5.2 | 6.18.46 | b6aecea4b2b2 |
| 6.6 | 5.2 | 6.6.153 | f72a51810d49 |
| 6.12 | 5.2 | 6.12.105 | 2ba9efdf9ebe |
| 5.15 | 5.2 | 5.15.218 | dab6a6627b0b |
| cip/6.1 | 5.2 | 6.1.187-cip60 | 56d7488533ce |
| cip/6.12 | 5.2 | 6.12.108-cip31 | 2ba9efdf9ebe |