HIGH Introduced in 5.19
vdpa_sim TxPull OOB
CVE-2026-97990
CVSS:3.1/AV:L/AC:H/PR:L/UI:N/S:C/C:H/I:N/A:H
KernelScan AI9.0CRITICAL
01Description
In the Linux kernel, the following vulnerability has been resolved: vdpa_sim_net: check TX pull result before RX copy vringh_iov_pull_iotlb() returns a signed byte count. A failed TX pull is currently added to the unsigned byte counter and then passed as a size_t length to receive_filter() and vringh_iov_push_iotlb(). A negative error can therefore become a large length in the RX path. Handle non-positive pull results before every length use. Count the TX error and complete the consumed TX descriptor with zero bytes. I found this bug myself, though the patch was written with AI assistance.
02KernelScan AI Analysis
Risk summary
A malicious VM guest or local process with access to a vdpa_sim network device can trigger an out-of-bounds read in the host kernel by causing a TX buffer pull operation to fail. The negative error code is misinterpreted as a very large unsigned length, leading to host kernel memory disclosure to the guest or a kernel crash. This affects systems running the vdpa_sim module with virtual machines or containers.
Vulnerability analysis
In the vdpa_sim network device simulator, when a transmit buffer pull fails and returns a negative error code, the code does not check for this error and instead treats the negative value as a very large unsigned byte count. This enormous length is then passed to the receive processing path, causing out-of-bounds reads from a page-sized internal buffer and potentially leaking host kernel memory to the guest or crashing the kernel. A malicious VM guest or container with access to a vdpa_sim device can trigger this by submitting transmit descriptors with buffer addresses that fail address translation. The fix checks the pull return value before any length use and, on failure or zero, skips receive processing entirely and completes the transmit descriptor with zero bytes.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 6.12 | 5.19 | 6.12.111 | c001abcde865 |
| 6.18 | 5.19 | 6.18.53 | 3af20238a09c |
| 6.6 | 5.19 | 6.6.158 | 1b803d382cde |
| 7.2 | 5.19 | 7.2.7 | 2bbf1c1f6999 |
| mainline | 5.19 | 7.3 | 0d195797a80b |
| cip/6.12 | 5.19 | 6.12.111-cip32 | c001abcde865 |
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 | Affected — no CIP fix yet (latest 6.1.189-cip61) |
| cip/6.1-rt | Affected — no CIP fix yet (latest 6.1.189-cip61-rt32) |