CVE-2026-99079 (GCVE-0-2026-99079)
Vulnerability from cvelistv5 – Published: 2026-10-23 12:23 – Updated: 2026-10-24 14:10
VLAI
EPSS
VEX
Title
net/mlx5e: Prevent stale XSK buffer release on refill retry
Summary
In the Linux kernel, the following vulnerability has been resolved:
net/mlx5e: Prevent stale XSK buffer release on refill retry
When an XDP redirect to an AF_XDP socket fails because its RX ring is
full, the XSK core frees the buffer. During the subsequent batched refill
of a legacy cyclic RQ, mlx5e also releases the WQE's XSK buffer before
allocating a replacement. If that refill succeeds only partially, a WQE
left without a replacement retains its old buffer pointer.
The buffer can meanwhile be allocated to another WQE. A later refill
retry can then free the live buffer through the stale pointer and publish
the same UMEM frame twice.
Mark the WQE as released immediately after the driver-side free. The flag
is already cleared when a replacement buffer is assigned, so refill
retries no longer release stale pointers.
The failure is silent and produces no kernel warning or splat. A
standalone legacy cyclic-RQ zero-copy libxsk reproducer, using 64-byte UDP
traffic offered at 12 Mpps, detected it: stock stopped after 2,854,914
packets in 4.094 seconds, with 4,542 xdp_rx_ring_full events and 64
ownership/double-publication errors. With this change it processed
356,904,225 packets in 30 seconds despite 571,405 xdp_rx_ring_full events,
with no ownership or data errors.
Severity
9.8 (Critical)
Assigner
References
Impacted products
2 products
| Vendor | Product | Version | CPE status | |
|---|---|---|---|---|
| Linux | Linux |
Affected:
3f93f82988bc6b4104314bf9aa485d47fbb7e241 , < 32bbb870078d467479965c21bbc4960c57eea208
(git)
Affected: 3f93f82988bc6b4104314bf9aa485d47fbb7e241 , < 34d1db2b18e1c1d189e34dd51923e031815f88e3 (git) Affected: 3f93f82988bc6b4104314bf9aa485d47fbb7e241 , < 639522e5056cade578a324acfa993ec6c9f7f5dc (git) Affected: 3f93f82988bc6b4104314bf9aa485d47fbb7e241 , < 655f47477054d19de3b138840be229a1a4490d0c (git) Affected: 3f93f82988bc6b4104314bf9aa485d47fbb7e241 , < e01620844c5c88b6fcf819d171df8e3976a0e76f (git) |
guessed | |
| Linux | Linux |
Affected:
6.4
Unaffected: 0 , < 6.4 (semver) Unaffected: 6.6.160 , ≤ 6.6.* (semver) Unaffected: 6.12.113 , ≤ 6.12.* (semver) Unaffected: 6.18.57 , ≤ 6.18.* (semver) Unaffected: 7.2.11 , ≤ 7.2.* (semver) Unaffected: 7.3 , ≤ * (original_commit_for_fix) |
guessed |
{
"containers": {
"cna": {
"affected": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/net/ethernet/mellanox/mlx5/core/en_rx.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "32bbb870078d467479965c21bbc4960c57eea208",
"status": "affected",
"version": "3f93f82988bc6b4104314bf9aa485d47fbb7e241",
"versionType": "git"
},
{
"lessThan": "34d1db2b18e1c1d189e34dd51923e031815f88e3",
"status": "affected",
"version": "3f93f82988bc6b4104314bf9aa485d47fbb7e241",
"versionType": "git"
},
{
"lessThan": "639522e5056cade578a324acfa993ec6c9f7f5dc",
"status": "affected",
"version": "3f93f82988bc6b4104314bf9aa485d47fbb7e241",
"versionType": "git"
},
{
"lessThan": "655f47477054d19de3b138840be229a1a4490d0c",
"status": "affected",
"version": "3f93f82988bc6b4104314bf9aa485d47fbb7e241",
"versionType": "git"
},
{
"lessThan": "e01620844c5c88b6fcf819d171df8e3976a0e76f",
"status": "affected",
"version": "3f93f82988bc6b4104314bf9aa485d47fbb7e241",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"drivers/net/ethernet/mellanox/mlx5/core/en_rx.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.4"
},
{
"lessThan": "6.4",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.160",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.113",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.57",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.11",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.3",
"versionType": "original_commit_for_fix"
}
]
}
],
"cpeApplicability": [
{
"nodes": [
{
"cpeMatch": [
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.6.160",
"versionStartIncluding": "6.4",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.12.113",
"versionStartIncluding": "6.4",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "6.18.57",
"versionStartIncluding": "6.4",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.2.11",
"versionStartIncluding": "6.4",
"vulnerable": true
},
{
"criteria": "cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*",
"versionEndExcluding": "7.3",
"versionStartIncluding": "6.4",
"vulnerable": true
}
],
"negate": false,
"operator": "OR"
}
]
}
],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnet/mlx5e: Prevent stale XSK buffer release on refill retry\n\nWhen an XDP redirect to an AF_XDP socket fails because its RX ring is\nfull, the XSK core frees the buffer. During the subsequent batched refill\nof a legacy cyclic RQ, mlx5e also releases the WQE\u0027s XSK buffer before\nallocating a replacement. If that refill succeeds only partially, a WQE\nleft without a replacement retains its old buffer pointer.\n\nThe buffer can meanwhile be allocated to another WQE. A later refill\nretry can then free the live buffer through the stale pointer and publish\nthe same UMEM frame twice.\n\nMark the WQE as released immediately after the driver-side free. The flag\nis already cleared when a replacement buffer is assigned, so refill\nretries no longer release stale pointers.\n\nThe failure is silent and produces no kernel warning or splat. A\nstandalone legacy cyclic-RQ zero-copy libxsk reproducer, using 64-byte UDP\ntraffic offered at 12 Mpps, detected it: stock stopped after 2,854,914\npackets in 4.094 seconds, with 4,542 xdp_rx_ring_full events and 64\nownership/double-publication errors. With this change it processed\n356,904,225 packets in 30 seconds despite 571,405 xdp_rx_ring_full events,\nwith no ownership or data errors."
}
],
"metrics": [
{
"cvssV3_1": {
"baseScore": 9.8,
"baseSeverity": "CRITICAL",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"scenarios": [
{
"lang": "en",
"value": "AV:N - UDP datagrams reaching mlx5 drive mlx5e_completion_event() -\u003e mlx5e_napi_poll() -\u003e mlx5e_poll_rx_cq()/XDP redirect, then mlx5e_napi_xsk_post() -\u003e mlx5e_post_rx_wqes() -\u003e patched mlx5e_xsk_free_rx_wqe(); sustained routable traffic fills the XSK RX ring and triggers stale release.\nAC:L - A sender can sustain small-packet traffic until __xsk_rcv_zc() reports RX-ring-full and mlx5e_xsk_alloc_rx_wqes_batched() refills only part of the missing WQEs; retries are deterministic and require no uncontrolled race or memory layout.\nPR:N - The NIC-CQE/NAPI receive path contains no capability or authentication check; xsk_create()\u0027s CAP_NET_RAW check applies to victim-side AF_XDP provisioning, while the remote UDP sender needs no privileges.\nUI:N - Once the zero-copy XSK pool and XDP redirect are active, xsk_rcv_zc() failure, mlx5e_napi_xsk_post(), and refill retries occur automatically as packets arrive, without further victim action.\nS:U - mlx5e_xsk_free_rx_wqe() corrupts the host kernel\u0027s xsk_buff_pool and mlx5 receive state without crossing a VM, IOMMU, or other security-authority boundary.\nC:H - Duplicate xdp_buff_xsk ownership lets repeated successful __xsk_rcv_zc() calls invoke unbounded xp_release(); in unaligned-UMEM mode, free_heads_cnt can write kernel pointers past the flexible free_heads[] array, yielding heap corruption exploitable for arbitrary disclosure.\nI:H - The duplicate WQEs can make xp_release() write beyond free_heads[], while xp_get_xskb() later trusts pointers popped through the corrupted count; this supplies out-of-bounds and corrupted-pointer write primitives capable of control-flow hijacking.\nA:H - The free_heads[] overflow or a bogus xskb consumed by xp_get_xskb() can oops or panic; additionally, the dma_dev_need_sync refill path can store NULL on allocation failure and have the stale retry pass it to xsk_buff_free()."
}
]
}
],
"providerMetadata": {
"dateUpdated": "2026-10-24T14:10:21.247Z",
"orgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"shortName": "Linux"
},
"references": [
{
"url": "https://git.kernel.org/stable/c/32bbb870078d467479965c21bbc4960c57eea208"
},
{
"url": "https://git.kernel.org/stable/c/34d1db2b18e1c1d189e34dd51923e031815f88e3"
},
{
"url": "https://git.kernel.org/stable/c/639522e5056cade578a324acfa993ec6c9f7f5dc"
},
{
"url": "https://git.kernel.org/stable/c/655f47477054d19de3b138840be229a1a4490d0c"
},
{
"url": "https://git.kernel.org/stable/c/e01620844c5c88b6fcf819d171df8e3976a0e76f"
}
],
"title": "net/mlx5e: Prevent stale XSK buffer release on refill retry",
"x_generator": {
"engine": "bippy-1.2.0"
}
}
},
"cveMetadata": {
"assignerOrgId": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"assignerShortName": "Linux",
"cveId": "CVE-2026-99079",
"datePublished": "2026-10-23T12:23:26.458Z",
"dateReserved": "2026-09-25T10:25:14.389Z",
"dateUpdated": "2026-10-24T14:10:21.247Z",
"state": "PUBLISHED"
},
"dataType": "CVE_RECORD",
"dataVersion": "5.2",
"vulnerability-lookup:meta": {
"epss": {
"cve": "CVE-2026-99079",
"date": "2026-10-24",
"epss": "0.00209",
"percentile": "0.10498"
},
"microsoft_vex": {
"current_release_date": "2026-10-25T01:06:45.000Z",
"cve": "CVE-2026-99079",
"id": "msrc_CVE-2026-99079",
"initial_release_date": "2026-10-25T01:05:18.000Z",
"product_status:under_investigation": "2",
"source": "Microsoft CSAF VEX",
"status": "final",
"title": "net/mlx5e: Prevent stale XSK buffer release on refill retry",
"url": "https://msrc.microsoft.com/csaf/vex/2026/msrc_cve-2026-99079.json",
"version": "2"
},
"nvd": {
"cve": {
"affected": [
{
"affectedData": [
{
"defaultStatus": "unaffected",
"product": "Linux",
"programFiles": [
"drivers/net/ethernet/mellanox/mlx5/core/en_rx.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"lessThan": "32bbb870078d467479965c21bbc4960c57eea208",
"status": "affected",
"version": "3f93f82988bc6b4104314bf9aa485d47fbb7e241",
"versionType": "git"
},
{
"lessThan": "34d1db2b18e1c1d189e34dd51923e031815f88e3",
"status": "affected",
"version": "3f93f82988bc6b4104314bf9aa485d47fbb7e241",
"versionType": "git"
},
{
"lessThan": "639522e5056cade578a324acfa993ec6c9f7f5dc",
"status": "affected",
"version": "3f93f82988bc6b4104314bf9aa485d47fbb7e241",
"versionType": "git"
},
{
"lessThan": "655f47477054d19de3b138840be229a1a4490d0c",
"status": "affected",
"version": "3f93f82988bc6b4104314bf9aa485d47fbb7e241",
"versionType": "git"
},
{
"lessThan": "e01620844c5c88b6fcf819d171df8e3976a0e76f",
"status": "affected",
"version": "3f93f82988bc6b4104314bf9aa485d47fbb7e241",
"versionType": "git"
}
]
},
{
"defaultStatus": "affected",
"product": "Linux",
"programFiles": [
"drivers/net/ethernet/mellanox/mlx5/core/en_rx.c"
],
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"vendor": "Linux",
"versions": [
{
"status": "affected",
"version": "6.4"
},
{
"lessThan": "6.4",
"status": "unaffected",
"version": "0",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.6.*",
"status": "unaffected",
"version": "6.6.160",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.12.*",
"status": "unaffected",
"version": "6.12.113",
"versionType": "semver"
},
{
"lessThanOrEqual": "6.18.*",
"status": "unaffected",
"version": "6.18.57",
"versionType": "semver"
},
{
"lessThanOrEqual": "7.2.*",
"status": "unaffected",
"version": "7.2.11",
"versionType": "semver"
},
{
"lessThanOrEqual": "*",
"status": "unaffected",
"version": "7.3",
"versionType": "original_commit_for_fix"
}
]
}
],
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67"
}
],
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "In the Linux kernel, the following vulnerability has been resolved:\n\nnet/mlx5e: Prevent stale XSK buffer release on refill retry\n\nWhen an XDP redirect to an AF_XDP socket fails because its RX ring is\nfull, the XSK core frees the buffer. During the subsequent batched refill\nof a legacy cyclic RQ, mlx5e also releases the WQE\u0027s XSK buffer before\nallocating a replacement. If that refill succeeds only partially, a WQE\nleft without a replacement retains its old buffer pointer.\n\nThe buffer can meanwhile be allocated to another WQE. A later refill\nretry can then free the live buffer through the stale pointer and publish\nthe same UMEM frame twice.\n\nMark the WQE as released immediately after the driver-side free. The flag\nis already cleared when a replacement buffer is assigned, so refill\nretries no longer release stale pointers.\n\nThe failure is silent and produces no kernel warning or splat. A\nstandalone legacy cyclic-RQ zero-copy libxsk reproducer, using 64-byte UDP\ntraffic offered at 12 Mpps, detected it: stock stopped after 2,854,914\npackets in 4.094 seconds, with 4,542 xdp_rx_ring_full events and 64\nownership/double-publication errors. With this change it processed\n356,904,225 packets in 30 seconds despite 571,405 xdp_rx_ring_full events,\nwith no ownership or data errors."
}
],
"id": "CVE-2026-99079",
"lastModified": "2026-10-24T14:16:54.940",
"metrics": {
"cvssMetricV31": [
{
"cvssData": {
"attackComplexity": "LOW",
"attackVector": "NETWORK",
"availabilityImpact": "HIGH",
"baseScore": 9.8,
"baseSeverity": "CRITICAL",
"confidentialityImpact": "HIGH",
"integrityImpact": "HIGH",
"privilegesRequired": "NONE",
"scope": "UNCHANGED",
"userInteraction": "NONE",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H",
"version": "3.1"
},
"exploitabilityScore": 3.9,
"impactScore": 5.9,
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"type": "Secondary"
}
]
},
"published": "2026-10-23T13:17:32.040",
"references": [
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/32bbb870078d467479965c21bbc4960c57eea208"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/34d1db2b18e1c1d189e34dd51923e031815f88e3"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/639522e5056cade578a324acfa993ec6c9f7f5dc"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/655f47477054d19de3b138840be229a1a4490d0c"
},
{
"source": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"url": "https://git.kernel.org/stable/c/e01620844c5c88b6fcf819d171df8e3976a0e76f"
}
],
"sourceIdentifier": "416baaa9-dc9f-4396-8d5f-8c081fb06d67",
"vulnStatus": "Received"
}
}
}
}
Loading…
Loading…
Drag nodes to arrange them. Double-click a related vulnerability to open it, or a source to visit its link. The Physics button on the left tunes the layout and the simulation; the legend at the bottom left hides or shows nodes by kind and by sighting type.
Experimental. This forecast is provided for visualization only and may change without notice. Do not use it for operational decisions.
Forecast uses a logistic model when the trend is rising, or an exponential decay model when the trend is falling. Fitted via linearized least squares.
Sightings
| Author | Source | Type | Date | Other |
|---|
Nomenclature
- Seen: The vulnerability was mentioned, discussed, or observed by the user.
- Confirmed: The vulnerability has been validated from an analyst's perspective.
- Published Proof of Concept: A public proof of concept is available for this vulnerability.
- Exploited: The vulnerability was observed as exploited by the user who reported the sighting.
- Patched: The vulnerability was observed as successfully patched by the user who reported the sighting.
- Not exploited: The vulnerability was not observed as exploited by the user who reported the sighting.
- Not confirmed: The user expressed doubt about the validity of the vulnerability.
- Not patched: The vulnerability was not observed as successfully patched by the user who reported the sighting.
Vulnerability timeline
Sightings and recorded dates, grouped by day · UTC
Loading timeline…
Loading…
Loading…
The MITRE ATT&CK techniques below are AI-generated suggestions, inferred from the description of the
vulnerability by the CIRCL/vulnerability-attack-technique-classification-roberta-base
model, served locally by ML-Gateway.
They have not been verified by an analyst and are provided for guidance only.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
The approach is described in our paper Mapping CVEs to MITRE ATT&CK Techniques: A Curated Gold-Set Classifier and the Limits of LLM-Assisted Label Expansion.
Browse all ATT&CK techniques and the vulnerabilities related to each.
Loading…
Related by attack behaviour
Vulnerabilities whose description is nearest to this one in the vector space of the CIRCL/vulnerability-attack-technique-biencoder model. This is a similarity search over the bi-encoder space (plain cosine), not a classification, and it has no measured accuracy.