HIGH Introduced in 4.8
vsock WorkFlush UAF
CVE-2026-80932
CVSS:3.1/AV:L/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
KernelScan AI7.0HIGH
01Description
In the Linux kernel, the following vulnerability has been resolved: vsock/virtio: flush works in dependency order virtio_vsock_remove() stops the virtqueues and then flushes each work item before freeing the enclosing virtio_vsock. The current order does not account for dependencies between those items: tx_work may queue send_pkt_work, and send_pkt_work may queue rx_work. In particular, send_pkt_work can set restart_rx and release tx_lock. The remove path can then stop the queues and flush rx_work before send_pkt_work queues it. Although the later send_pkt_work flush waits for that producer to finish, nothing waits for the newly queued rx_work, so kfree(vsock) can race with it. KASAN reported: BUG: KASAN: slab-use-after-free in virtio_transport_rx_work+0x487/0x4b0 Read of size 8 at addr ffff888114c2b008 by task kworker/1:1/47 Workqueue: virtio_vsock virtio_transport_rx_work Call Trace: virtio_transport_rx_work+0x487/0x4b0 process_one_work+0x688/0x1120 worker_thread+0x45b/0xd10 Allocated by task 1: virtio_vsock_probe+0xef/0x6b0 Freed by task 84: kfree+0x131/0x3c0 virtio_vsock_remove+0xd1/0x100 Flush the works in producer-to-consumer order. virtio_vsock_vqs_del() has already disabled the queue callbacks and cleared the run flags, so after tx_work and send_pkt_work are drained, no source remains that can queue rx_work after its flush.
02KernelScan AI Analysis
Risk summary
A race condition in the virtio-vsock driver's device removal path allows a use-after-free on the driver's main structure. Any local user in a guest VM with a virtio-vsock device who can create vsock connections and influence device removal timing can trigger kernel memory corruption, potentially leading to code execution or a kernel panic. The bug has existed since the driver was introduced in kernel 4.8.
Vulnerability analysis
When the virtio-vsock device is removed, the driver stops the virtqueues and flushes pending work items before freeing the driver structure. The original flush order does not respect dependencies between work items: the send-packet work can queue the receive work, but the receive work is flushed first. After the receive work flush completes, the still-running send-packet work can queue it again, and the subsequent free of the driver structure races with the newly queued receive work, causing a use-after-free. The fix reorders the flushes to drain producers before consumers—transmit work, then event work, then send-packet work, and finally receive work—so that once the receive work is flushed, no remaining producer can re-queue it. The bug is reachable from within a guest VM that has a virtio-vsock device, by a local user who can open vsock sockets; triggering the race also requires the device removal path to run, which is normally host-initiated but may be guest-triggerable depending on the hot-unplug configuration.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 5.10 | 4.8 | 5.10.270 | e059a14c1067 |
| 5.15 | 4.8 | 5.15.221 | 531e2ac2dab1 |
| 6.1 | 4.8 | 6.1.188 | f3313d952fc3 |
| 6.12 | 4.8 | 6.12.109 | 2187a56f2fd1 |
| 6.18 | 4.8 | 6.18.50 | 165a330a68b5 |
| 6.6 | 4.8 | 6.6.157 | b9cb4e8ba71c |
| 7.2 | 4.8 | 7.2.4 | da5e9f08714c |
| mainline | 4.8 | 7.3 | 728836ebca23 |
| cip/5.10 | 4.8 | 5.10.271-cip78 | e059a14c1067 |
| cip/6.1 | 4.8 | 6.1.189-cip61 | f3313d952fc3 |
| cip/6.1-rt | 4.8 | 6.1.189-cip61-rt32 | f3313d952fc3 |
| cip/6.12 | 4.8 | 6.12.111-cip32 | 2187a56f2fd1 |
04CIP Kernels
State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.
| CIP tree | State |
|---|---|
| cip/6.12 | Fixed in 6.12.111-cip32 |
| cip/6.1 | Fixed in 6.1.189-cip61 |
| cip/6.1-rt | Fixed in 6.1.189-cip61-rt32 |
| cip/5.10 | Fixed in 5.10.271-cip78 |
| cip/5.10-rt | Affected — no CIP fix yet (latest 5.10.268-cip77-rt34) |
| cip/4.19 | Affected — no CIP fix yet (latest 4.19.325-cip136) |
| cip/4.19-rt | Affected — no CIP fix yet (latest 4.19.325-cip136-rt50) |