KernelScan.io

HIGH Introduced in 5.19

vdpa_sim TxPull OOB

CVE-2026-97990

CVSS 7.5 / 10.0 NVD

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

KernelScan AI9.0CRITICAL

01

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.

02

Engine v0.6.0

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.

Affecteddrivers/vdpa/vdpa_sim/vdpa_sim_net.c (vdpasim_net)

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.

03

BranchIntroducedFixed inPatch commit
6.125.196.12.111c001abcde865
6.185.196.18.533af20238a09c
6.65.196.6.1581b803d382cde
7.25.197.2.72bbf1c1f6999
mainline5.197.30d195797a80b
cip/6.125.196.12.111-cip32c001abcde865

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.1Affected — no CIP fix yet (latest 6.1.189-cip61)
cip/6.1-rtAffected — no CIP fix yet (latest 6.1.189-cip61-rt32)