KernelScan.io

HIGH Introduced in 5.2

vfio_ccw IoMutex Race

CVE-2026-80548

CVSS 8.8 / 10.0 NVD

CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H

KernelScan AI7.7HIGH

01

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.

02

Engine v0.6.0

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.

Affecteddrivers/s390/cio/vfio_ccw_drv.c (vfio_ccw)

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.

03

BranchIntroducedFixed inPatch commit
7.15.27.1.102a5ac0c0f1f7
mainline5.27.234f4feff3e90
6.15.26.1.18556d7488533ce
6.185.26.18.46b6aecea4b2b2
6.65.26.6.153f72a51810d49
6.125.26.12.1052ba9efdf9ebe
5.155.25.15.218dab6a6627b0b
cip/6.15.26.1.187-cip6056d7488533ce
cip/6.125.26.12.108-cip312ba9efdf9ebe