KernelScan.io

HIGH Introduced in 5.13

vdpa SectorStart OOB

CVE-2026-97991

CVSS 7.8 / 10.0 NVD

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

KernelScan AI8.5HIGH

01

In the Linux kernel, the following vulnerability has been resolved: vdpa_sim_blk: reject out-of-range sector starts vdpasim_blk_check_range() logs an invalid start sector but continues validating the request. The subsequent unsigned capacity subtraction can underflow and let an out-of-range buffer offset reach the data path. The invalid offset is used by three request paths. VIRTIO_BLK_T_OUT copies guest data to blk->buffer + offset through vringh_iov_pull_iotlb(), causing an out-of-bounds write in _copy_from_iter() or memcpy(). VIRTIO_BLK_T_IN copies from blk->buffer + offset to the guest through vringh_iov_push_iotlb(), causing an out-of-bounds read in _copy_to_iter(). VIRTIO_BLK_T_WRITE_ZEROES passes blk->buffer + offset to memset(), causing an out-of-bounds write. Reject starts at or beyond the capacity before the subtraction. Treat the capacity boundary as invalid because the IN and OUT paths round byte counts down to sectors for validation but later copy the original byte counts. A sub-sector request at the capacity boundary would otherwise still access past the end of the buffer. I found this bug myself, though the patch was written with AI assistance.

02

Engine v0.6.0

Risk summary

Guest virtual machines using the vdpa_sim_blk simulated block device can send crafted I/O requests that bypass range validation and trigger out-of-bounds memory access in the host kernel. This allows a guest tenant to read or corrupt host kernel memory, potentially escaping the VM boundary. The vulnerability requires the vdpa_sim module to be loaded and a simulated block device assigned to a guest VM.

Affecteddrivers/vdpa/vdpa_sim/vdpa_sim_blk.c (vdpa_sim_blk)

Vulnerability analysis

The vDPA simulator block device validates incoming I/O requests by checking whether the starting sector is within the device capacity, but the validation function only logs a debug message when the sector is out of range without actually rejecting the request. The subsequent unsigned arithmetic underflows, producing an offset that appears valid and is passed to the data copy paths — resulting in out-of-bounds reads and writes against the host kernel's internal buffer. The fix adds an early rejection of any sector at or beyond the capacity boundary before the subtraction occurs, and tightens the boundary check from a strict greater-than to a greater-than-or-equal comparison to account for sub-sector requests that round down during validation but copy full byte counts afterward. This vulnerability is reachable from a guest virtual machine that has been assigned a vdpa_sim_blk device; an attacker running inside the guest can submit crafted block requests to corrupt or leak host kernel memory, breaking VM isolation.

03

BranchIntroducedFixed inPatch commit
5.155.135.15.2222ff2a8d063fd
6.15.136.1.18936ef4d8527f7
6.125.136.12.11114acb0d44b7d
6.185.136.18.53a8a1413a2cfd
6.65.136.6.158000c6300776c
7.25.137.2.7d6dac17e20fd
mainline5.137.30a8693f00c40
cip/6.15.136.1.189-cip6136ef4d8527f7
cip/6.1-rt5.136.1.189-cip61-rt3236ef4d8527f7
cip/6.125.136.12.111-cip3214acb0d44b7d

04

State of the newest release of each Civil Infrastructure Platform SLTS tree, from CIP's own fix records.

CIP treeState
cip/6.12Fixed in 6.12.111-cip32
cip/6.1Fixed in 6.1.189-cip61
cip/6.1-rtFixed in 6.1.189-cip61-rt32