net/mlx5e: Prevent stale XSK buffer release on refill retry
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.
- Products
- Kernel
- Affected versions
- Not specified
- Fixed versions
- 6.12.113, 6.18.57, 6.6.160, 7.2.11
- CVEs
- CVE-2026-99079
- Confirmed fixed CVEs
- Not specified
- Updated in this feed
- 7 Nov 2026, 01:56 UTC · Revision 1
Source evidence
net/mlx5e: Prevent stale XSK buffer release on refill retry
core-osv · Original sourcePublished 23 Oct 2026, 12:23 UTC
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.
osv:CVE-2026-99079
Kernel
Fixed versions: 6.6.160, 6.12.113, 6.18.57, 7.2.11
Complete source record
{
"id": "feba7f90732620d3148aac2a74ba17ec4df737b82fe0d6c0391c6c2ea8f04add",
"url": "https://osv.dev/vulnerability/CVE-2026-99079",
"method": "structured",
"payload": {
"kind": "advisory",
"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.",
"evidence": "osv:CVE-2026-99079",
"products": [
{
"name": {
"value": "Kernel",
"evidence": "/affected/1/package/name"
},
"prerequisites": [],
"fixed_versions": [
{
"value": "6.6.160",
"evidence": "/affected/1/ranges"
},
{
"value": "6.12.113",
"evidence": "/affected/1/ranges"
},
{
"value": "6.18.57",
"evidence": "/affected/1/ranges"
},
{
"value": "7.2.11",
"evidence": "/affected/1/ranges"
}
],
"affected_versions": []
}
],
"severity": "critical",
"structured": {
"id": "CVE-2026-99079",
"aliases": [
"CVE-2026-99079"
],
"metrics": [
{
"type": "CVSS_V3",
"score": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H"
}
],
"affected": [
{
"ranges": [
{
"repo": "https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git",
"type": "GIT",
"events": [
{
"introduced": "3f93f82988bc6b4104314bf9aa485d47fbb7e241"
},
{
"fixed": "32bbb870078d467479965c21bbc4960c57eea208"
},
{
"fixed": "34d1db2b18e1c1d189e34dd51923e031815f88e3"
},
{
"fixed": "639522e5056cade578a324acfa993ec6c9f7f5dc"
},
{
"fixed": "655f47477054d19de3b138840be229a1a4490d0c"
},
{
"fixed": "e01620844c5c88b6fcf819d171df8e3976a0e76f"
}
]
}
],
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-99079.json"
}
},
{
"ranges": [
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.4.0"
},
{
"fixed": "6.6.160"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.7.0"
},
{
"fixed": "6.12.113"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.13.0"
},
{
"fixed": "6.18.57"
}
]
},
{
"type": "ECOSYSTEM",
"events": [
{
"introduced": "6.19.0"
},
{
"fixed": "7.2.11"
}
]
}
],
"package": {
"name": "Kernel",
"ecosystem": "Linux"
},
"database_specific": {
"source": "https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-99079.json"
}
}
],
"modified": "2026-10-28T02:30:48.789787154Z",
"provider": "osv",
"references": [
"https://git.kernel.org/stable/c/32bbb870078d467479965c21bbc4960c57eea208",
"https://git.kernel.org/stable/c/34d1db2b18e1c1d189e34dd51923e031815f88e3",
"https://git.kernel.org/stable/c/639522e5056cade578a324acfa993ec6c9f7f5dc",
"https://git.kernel.org/stable/c/655f47477054d19de3b138840be229a1a4490d0c",
"https://git.kernel.org/stable/c/e01620844c5c88b6fcf819d171df8e3976a0e76f",
"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/99xxx/CVE-2026-99079.json",
"https://nvd.nist.gov/vuln/detail/CVE-2026-99079",
"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"
],
"provider_metadata": {
"cna_assigner": "Linux",
"osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/99xxx/CVE-2026-99079.json"
}
},
"related_cves": [
{
"value": "CVE-2026-99079",
"evidence": "/id"
}
],
"security_relevant": true,
"severity_evidence": "/severity/0/score"
},
"source_id": "core-osv",
"document_id": 517160,
"published_at": "2026-10-23T12:23:26.458+00:00"
}