CVE-2026-64552: virtio-net: fix len check in receive_big()

Greg Kroah-Hartman <[email protected]> Mon, 27 Jul 2026 22:10:50 +0200
Newsgroups org.kernel.vger.linux-cve-announce
Message-ID <2026072737-CVE-2026-64552-5e13@gregkh>
From: Greg Kroah-Hartman <[email protected]>

Description
===========

In the Linux kernel, the following vulnerability has been resolved:

virtio-net: fix len check in receive_big()

receive_big() bounds the device-announced length by
(big_packets_num_skbfrags + 1) * PAGE_SIZE.  That is still too loose:
add_recvbuf_big() sets sg[1] to start at offset
sizeof(struct padded_vnet_hdr) into the first page, so the chain
actually carries hdr_len + (PAGE_SIZE - sizeof(padded_vnet_hdr)) +
big_packets_num_skbfrags * PAGE_SIZE bytes -- 20 bytes less than the
check allows for the common hdr_len == 12 case.

A malicious virtio backend can announce a len in that gap.  page_to_skb()
then walks one frag past the page chain, storing a NULL page->private
into skb_shinfo()->frags[MAX_SKB_FRAGS], which is both an out-of-bounds
write past the static frag array and a NULL frag handed up the rx path.

Bound len by the size add_recvbuf_big() actually advertised.

The Linux kernel CVE team has assigned CVE-2026-64552 to this issue.


Affected and fixed versions
===========================

	Issue introduced in 6.1.159 with commit 82f9028e83944a9eee5229cbc6fee9be1de8a62d and fixed in 6.1.178 with commit f9451d0fd5ba635dcabb49bfe456a6db734a8986
	Issue introduced in 6.6.117 with commit 946dec89c41726b94d31147ec528b96af0be1b5a and fixed in 6.6.145 with commit 38e94d63e29f4a5c6eae87ee2c02101aaa321502
	Issue introduced in 6.12.58 with commit 82fe78065450d2d07f36a22e2b6b44955cf5ca5b and fixed in 6.12.97 with commit fbeb65154583879d556ea94cb2f15888e9470f3d
	Issue introduced in 6.18 with commit 0c716703965ffc5ef4311b65cb5d84a703784717 and fixed in 6.18.40 with commit c7fc9adf4e006155f7f2aeda052fbcde25cdcc49
	Issue introduced in 6.18 with commit 0c716703965ffc5ef4311b65cb5d84a703784717 and fixed in 7.1.5 with commit e6b8463b7d791f3886d7584259d6e9f06a69f12e
	Issue introduced in 6.18 with commit 0c716703965ffc5ef4311b65cb5d84a703784717 and fixed in 7.2-rc1 with commit 9e5ad06ea826322ce8c58b4a68442a96f600c3c4
	Issue introduced in 6.17.8 with commit 3e9d89f2ecd3636bd4cbdfd0b2dfdaf58f9882e2

Please see https://www.kernel.org for a full list of currently supported
kernel versions by the kernel community.

Unaffected versions might change over time as fixes are backported to
older supported kernel versions.  The official CVE entry at
	https://cve.org/CVERecord/?id=CVE-2026-64552
will be updated if fixes are backported, please check that for the most
up to date information about this issue.


Affected files
==============

The file(s) affected by this issue are:
	drivers/net/virtio_net.c


Mitigation
==========

The Linux kernel CVE team recommends that you update to the latest
stable kernel version for this, and many other bugfixes.  Individual
changes are never tested alone, but rather are part of a larger kernel
release.  Cherry-picking individual commits is not recommended or
supported by the Linux kernel community at all.  If however, updating to
the latest release is impossible, the individual changes to resolve this
issue can be found at these commits:
	https://git.kernel.org/stable/c/f9451d0fd5ba635dcabb49bfe456a6db734a8986
	https://git.kernel.org/stable/c/38e94d63e29f4a5c6eae87ee2c02101aaa321502
	https://git.kernel.org/stable/c/fbeb65154583879d556ea94cb2f15888e9470f3d
	https://git.kernel.org/stable/c/c7fc9adf4e006155f7f2aeda052fbcde25cdcc49
	https://git.kernel.org/stable/c/e6b8463b7d791f3886d7584259d6e9f06a69f12e
	https://git.kernel.org/stable/c/9e5ad06ea826322ce8c58b4a68442a96f600c3c4