{ "dataType": "CVE_RECORD", "dataVersion": "5.2", "cveMetadata": { "cveId": "CVE-2025-39973", "assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "state": "PUBLISHED", "assignerShortName": "Linux", "dateReserved": "2025-04-16T07:20:57.149Z", "datePublished": "2025-10-15T07:55:55.590Z", "dateUpdated": "2026-08-05T12:06:42.870Z" }, "containers": { "cna": { "providerMetadata": { "orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67", "shortName": "Linux", "dateUpdated": "2026-08-05T12:06:42.870Z" }, "descriptions": [ { "lang": "en", "value": "In the Linux kernel, the following vulnerability has been resolved:\n\ni40e: add validation for ring_len param\n\nThe `ring_len` parameter provided by the virtual function (VF)\nis assigned directly to the hardware memory context (HMC) without\nany validation.\n\nTo address this, introduce an upper boundary check for both Tx and Rx\nqueue lengths. The maximum number of descriptors supported by the\nhardware is 8k-32.\nAdditionally, enforce alignment constraints: Tx rings must be a multiple\nof 8, and Rx rings must be a multiple of 32." } ], "metrics": [ { "cvssV3_1": { "version": "3.1", "vectorString": "CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H", "baseScore": 8.8, "baseSeverity": "HIGH" }, "scenarios": [ { "lang": "en", "value": "AV:L - The vulnerability is triggered by a virtchnl `VIRTCHNL_OP_CONFIG_VSI_QUEUES` mailbox message sent by the VF driver over the PCIe admin queue, not by network traffic; the attacker needs local access to a guest VM or host process that owns an SR-IOV VF. This is the standard local guest-to-host device-passthrough attack path.\nAC:L - Exploitation is fully deterministic — the attacker simply emits one CONFIG_VSI_QUEUES message with a misaligned or oversized `ring_len` and the value is programmed into the HMC context unconditionally. There is no race, no timing window, and no dependence on memory layout the attacker cannot influence.\nPR:L - The attacker holds no privileges on the vulnerable component (the host PF driver) — only control of an assigned VF, which is exactly what an ordinary untrusted cloud tenant or container is granted. No trusted-VF check gates this opcode in `i40e_vc_process_vf_msg()`, so a normally provisioned, untrusted VF owner suffices.\nUI:N - The malicious virtchnl message is processed by the PF asynchronously from the admin receive queue with no action by the host administrator or any other user. No victim interaction is involved at any point.\nS:C - The attacking component is the VF under guest/tenant authority, while the impacted resources are the host-owned HMC hardware context, the shared physical NIC, and every other VF on the adapter — a guest-to-host boundary crossing analogous to a VM escape. Corruption of PF-managed hardware state propagates outside the attacker's security authority to the host and co-tenants.\nC:H - A qlen larger than the memory actually backing the descriptor ring makes the NIC fetch descriptors past the end of the allocated region, and in deployments without IOMMU isolation (vfio-pci noiommu/DPDK, `iommu=pt`, embedded platforms) that is a device-mediated out-of-bounds read of host physical memory. The 13-bit truncation additionally desynchronizes hardware and driver views of the ring, exposing stale descriptor and packet contents.\nI:H - The same unbounded qlen drives Rx descriptor writeback and Tx head writeback to addresses beyond the intended ring, yielding attacker-influenced DMA writes outside the allocated buffer, again unconstrained where the VF is not behind an IOMMU. It also lets an untrusted VF corrupt host-managed hardware queue state on an adapter shared with other tenants.\nA:H - Out-of-spec values (misaligned, or above the 8160-descriptor hardware maximum, or truncated by the 13-bit field) produce HMC error interrupts, DMA/IOMMU faults, queue hangs and PF-level resets that take down the entire physical NIC along with the host's own networking and all other VFs. The message can be replayed indefinitely from the guest, making it a persistent cross-tenant denial of service." } ] } ], "affected": [ { "product": "Linux", "vendor": "Linux", "defaultStatus": "unaffected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c" ], "versions": [ { "version": "5c3c48ac6bf56367c4e89f6453cd2d61e50375bd", "lessThan": "0543d40d6513cdf1c7882811086e59a6455dfe97", "status": "affected", "versionType": "git" }, { "version": "5c3c48ac6bf56367c4e89f6453cd2d61e50375bd", "lessThan": "7d749e38dd2b7e8a80da2ca30c93e09de95bfcf9", "status": "affected", "versionType": "git" }, { "version": "5c3c48ac6bf56367c4e89f6453cd2d61e50375bd", "lessThan": "45a7527cd7da4cdcf3b06b5c0cb1cae30b5a5985", "status": "affected", "versionType": "git" }, { "version": "5c3c48ac6bf56367c4e89f6453cd2d61e50375bd", "lessThan": "d3b0d3f8d11fa957171fbb186e53998361a88d4e", "status": "affected", "versionType": "git" }, { "version": "5c3c48ac6bf56367c4e89f6453cd2d61e50375bd", "lessThan": "c0c83f4cd074b75cecef107bfc349be7d516c9c4", "status": "affected", "versionType": "git" }, { "version": "5c3c48ac6bf56367c4e89f6453cd2d61e50375bd", "lessThan": "05fe81fb9db20464fa532a3835dc8300d68a2f84", "status": "affected", "versionType": "git" }, { "version": "5c3c48ac6bf56367c4e89f6453cd2d61e50375bd", "lessThan": "afec12adab55d10708179a64d95d650741e60fe0", "status": "affected", "versionType": "git" }, { "version": "5c3c48ac6bf56367c4e89f6453cd2d61e50375bd", "lessThan": "55d225670def06b01af2e7a5e0446fbe946289e8", "status": "affected", "versionType": "git" } ] }, { "product": "Linux", "vendor": "Linux", "defaultStatus": "affected", "repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git", "programFiles": [ "drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c" ], "versions": [ { "version": "3.12", "status": "affected" }, { "version": "0", "lessThan": "3.12", "status": "unaffected", "versionType": "semver" }, { "version": "5.4.300", "lessThanOrEqual": "5.4.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.10.245", "lessThanOrEqual": "5.10.*", "status": "unaffected", "versionType": "semver" }, { "version": "5.15.194", "lessThanOrEqual": "5.15.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.1.155", "lessThanOrEqual": "6.1.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.6.109", "lessThanOrEqual": "6.6.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.12.50", "lessThanOrEqual": "6.12.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.16.10", "lessThanOrEqual": "6.16.*", "status": "unaffected", "versionType": "semver" }, { "version": "6.17", "lessThanOrEqual": "*", "status": "unaffected", "versionType": "original_commit_for_fix" } ] } ], "cpeApplicability": [ { "nodes": [ { "operator": "OR", "negate": false, "cpeMatch": [ { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.12", "versionEndExcluding": "5.4.300" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.12", "versionEndExcluding": "5.10.245" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.12", "versionEndExcluding": "5.15.194" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.12", "versionEndExcluding": "6.1.155" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.12", "versionEndExcluding": "6.6.109" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.12", "versionEndExcluding": "6.12.50" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.12", "versionEndExcluding": "6.16.10" }, { "vulnerable": true, "criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*", "versionStartIncluding": "3.12", "versionEndExcluding": "6.17" } ] } ] } ], "references": [ { "url": "https://git.kernel.org/stable/c/0543d40d6513cdf1c7882811086e59a6455dfe97" }, { "url": "https://git.kernel.org/stable/c/7d749e38dd2b7e8a80da2ca30c93e09de95bfcf9" }, { "url": "https://git.kernel.org/stable/c/45a7527cd7da4cdcf3b06b5c0cb1cae30b5a5985" }, { "url": "https://git.kernel.org/stable/c/d3b0d3f8d11fa957171fbb186e53998361a88d4e" }, { "url": "https://git.kernel.org/stable/c/c0c83f4cd074b75cecef107bfc349be7d516c9c4" }, { "url": "https://git.kernel.org/stable/c/05fe81fb9db20464fa532a3835dc8300d68a2f84" }, { "url": "https://git.kernel.org/stable/c/afec12adab55d10708179a64d95d650741e60fe0" }, { "url": "https://git.kernel.org/stable/c/55d225670def06b01af2e7a5e0446fbe946289e8" } ], "title": "i40e: add validation for ring_len param", "x_generator": { "engine": "bippy-1.2.0" } } } }