CVE-2026-23143

Source
https://cve.org/CVERecord?id=CVE-2026-23143
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-23143.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-23143
Downstream
Published
2026-02-14T15:36:08.834Z
Modified
2026-02-14T20:03:14.212244Z
Summary
virtio_net: Fix misalignment bug in struct virtnet_info
Details

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

virtionet: Fix misalignment bug in struct virtnetinfo

Use the new TRAILING_OVERLAP() helper to fix a misalignment bug along with the following warning:

drivers/net/virtio_net.c:429:46: warning: structure containing a flexible array member is not at the end of another structure [-Wflex-array-member-not-at-end]

This helper creates a union between a flexible-array member (FAM) and a set of members that would otherwise follow it (in this case u8 rss_hash_key_data[VIRTIO_NET_RSS_MAX_KEY_SIZE];). This overlays the trailing members (rsshashkeydata) onto the FAM (hashkeydata) while keeping the FAM and the start of MEMBERS aligned. The staticassert() ensures this alignment remains.

Notice that due to tail padding in flexible struct virtio_net_rss_config_trailer, rss_trailer.hash_key_data (at offset 83 in struct virtnetinfo) and rss_hash_key_data (at offset 84 in struct virtnetinfo) are misaligned by one byte. See below:

struct virtionetrssconfigtrailer { __le16 maxtxvq; /* 0 2 / __u8 hashkeylength; / 2 1 / __u8 hashkeydata[]; / 3 0 */

    /* size: 4, cachelines: 1, members: 3 */
    /* padding: 1 */
    /* last cacheline: 4 bytes */

};

struct virtnetinfo { ... struct virtionetrssconfigtrailer rsstrailer; /* 80 4 */

    /* XXX last struct has 1 byte of padding */

    u8                         rss_hash_key_data[40]; /*    84    40 */

... /* size: 832, cachelines: 13, members: 48 / / sum members: 801, holes: 8, sum holes: 31 / / paddings: 2, sum paddings: 5 */ };

After changes, those members are correctly aligned at offset 795:

struct virtnetinfo { ... union { struct virtionetrssconfigtrailer rsstrailer; /* 792 4 */ struct { unsigned char _offsettohashkeydata[3]; /* 792 3 */ u8 rsshashkeydata[40]; /* 795 40 / }; / 792 43 / }; / 792 44 / ... / size: 840, cachelines: 14, members: 47 / / sum members: 801, holes: 8, sum holes: 35 / / padding: 4 / / paddings: 1, sum paddings: 4 / / last cacheline: 8 bytes */ };

As a result, the RSS key passed to the device is shifted by 1 byte: the last byte is cut off, and instead a (possibly uninitialized) byte is added at the beginning.

As a last note struct virtio_net_rss_config_hdr *rss_hdr; is also moved to the end, since it seems those three members should stick around together. :)

Database specific
{
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/23xxx/CVE-2026-23143.json",
    "cna_assigner": "Linux"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
ed3100e90d0d120a045a551b85eb43cf2527e885
Fixed
ae48108c2310f1dd700e0dbb655c2f1d92ed00fc
Fixed
4156c3745f06bc197094b9ee97a9584e69ed00bf

Affected versions

v6.*
v6.14
v6.15
v6.15-rc1
v6.15-rc2
v6.15-rc3
v6.15-rc4
v6.15-rc5
v6.15-rc6
v6.15-rc7
v6.16
v6.16-rc1
v6.16-rc2
v6.16-rc3
v6.16-rc4
v6.16-rc5
v6.16-rc6
v6.16-rc7
v6.17
v6.17-rc1
v6.17-rc2
v6.17-rc3
v6.17-rc4
v6.17-rc5
v6.17-rc6
v6.17-rc7
v6.18
v6.18-rc1
v6.18-rc2
v6.18-rc3
v6.18-rc4
v6.18-rc5
v6.18-rc6
v6.18-rc7
v6.18.1
v6.18.2
v6.18.3
v6.18.4
v6.18.5
v6.18.6
v6.19-rc1
v6.19-rc2
v6.19-rc3
v6.19-rc4

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-23143.json"

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
6.15.0
Fixed
6.18.7

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-23143.json"