{"id":"CVE-2026-74558","revision":null,"records":[{"revision":"cadb4902bbcd422fb972d5c422668db7","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2026-74558","aliases":[],"title":"xsk: reclaim invalid Tx descriptors in ZC batch path","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nxsk: reclaim invalid Tx descriptors in ZC batch path\n\nThe zero-copy Tx batch parser stops when it encounters an invalid\ndescriptor. If this happens after one or more continuation descriptors,\nthe Tx consumer can be advanced past fragments that are neither submitted\nto the driver nor returned to userspace through the completion ring.\n\nA similar problem occurs when a packet exceeds xdp_zc_max_segs. The\ndescriptors consumed up to the limit are released without completion, and\nthe remaining continuation descriptors can subsequently be interpreted\nas the beginning of another packet.\n\nParse Tx batches in packet units and distinguish descriptors belonging to\ncomplete valid packets from descriptors consumed while draining an\ninvalid or oversized packet. Return the former to the driver and append\nthe latter to the CQ address area so userspace can reclaim their UMEM\nframes.\n\nTreat a standalone invalid descriptor as a one-descriptor reclaim-only\npacket. Advancing the Tx-ring consumer releases the ring slot, but does\nnot by itself return ownership of the referenced UMEM frame to userspace.\n\nOnce draining starts, continue until the packet's end-of-packet\ndescriptor is consumed. Preserve the drain state on the socket when EOP\nhas not yet been supplied, so draining can continue during a later call.\nLeave incomplete but otherwise valid packets on the Tx ring.\n\nShared-UMEM pools using multi-buffer Tx also need packet-framed parsing.\nWalk their Tx sockets one packet at a time, preserving the existing\nper-socket fairness scheme, instead of using the legacy one-descriptor\nfallback. Keep that fallback for shared pools that do not use\nmulti-buffer Tx. Since the drain state is maintained per socket and both\nthe singular and shared paths can resume an interrupted drain, changing\nthe socket list from singular to shared requires no special bind-time\ntransition.\n\nCQ entries are positional, and drivers may complete only part of the Tx\nwork returned by xsk_tx_peek_release_desc_batch(). Therefore, reclaim-only\nentries cannot be published immediately when earlier driver-visible\ndescriptors are still outstanding.\n\nTrack the number of driver-visible CQ entries preceding the reclaim\nentries. Let xsk_tx_completed() publish partial hardware Tx completions,\nand publish the reclaim entries only after every earlier Tx descriptor\nhas completed. Complete a reclaim-only batch immediately when there is no\ndriver-visible work in front of it, and prevent another Tx batch from\nbeing appended while reclaim entries remain pending.\n\nAlso cap batch processing by the size of the pool's temporary descriptor\narray, as Tx rings belonging to sockets sharing a UMEM may have different\nsizes.\n\nThis ensures that every invalid Tx descriptor consumed by the ZC batch\npath is either submitted to the driver as part of a valid packet or\nreturned to userspace without violating CQ completion ordering.","state":0,"publishedAt":"2026-08-15T12:28:02.628+00:00","modifiedAt":"2026-10-21T12:45:56.189+00:00","affected":[{"ecosystem":"Vendor product","name":"Linux","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"product\": \"Linux\",\n                    \"vendor\": \"Linux\",\n                    \"defaultStatus\": \"unaffected\",\n                    \"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\n                    \"programFiles\": [\n                        \"Documentation/networking/af_xdp.rst\",\n                        \"include/net/xsk_buff_pool.h\",\n                        \"net/xdp/xsk.c\",\n                        \"net/xdp/xsk_buff_pool.c\",\n                        \"net/xdp/xsk_queue.h\"\n                    ],\n                    \"versions\": [\n                        {\n                            \"version\": \"cf24f5a5feeaae34c1a34d1e04f8ac697290427a\",\n                            \"lessThan\": \"56036bdc445c468b1defd1780ed2af4a3fc7ddb2\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"cf24f5a5feeaae34c1a34d1e04f8ac697290427a\",\n                            \"lessThan\": \"2c0a8cc97a9d970a252f17aa0bbf4588768f7aad\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"cf24f5a5feeaae34c1a34d1e04f8ac697290427a\",\n                            \"lessThan\": \"e7ce2bad0c33471c8da4dd73dff2119a68f96f3a\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"cf24f5a5feeaae34c1a34d1e04f8ac697290427a\",\n                            \"lessThan\": \"72f2b4516faf55d4dfac2414649d3cffa5fd2c5e\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        }\n                    ]\n                }"},{"ecosystem":"Vendor product","name":"Linux","ranges":[],"versions":[],"rawVersionEvidence":"{\n                    \"product\": \"Linux\",\n                    \"vendor\": \"Linux\",\n                    \"defaultStatus\": \"affected\",\n                    \"repo\": \"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git\",\n                    \"programFiles\": [\n                        \"Documentation/networking/af_xdp.rst\",\n                        \"include/net/xsk_buff_pool.h\",\n                        \"net/xdp/xsk.c\",\n                        \"net/xdp/xsk_buff_pool.c\",\n                        \"net/xdp/xsk_queue.h\"\n                    ],\n                    \"versions\": [\n                        {\n                            \"version\": \"6.6\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \"0\",\n                            \"lessThan\": \"6.6\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.12.114\",\n                            \"lessThanOrEqual\": \"6.12.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.18.57\",\n                            \"lessThanOrEqual\": \"6.18.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"7.1.8\",\n                            \"lessThanOrEqual\": \"7.1.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"7.2\",\n                            \"lessThanOrEqual\": \"*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"original_commit_for_fix\"\n                        }\n                    ]\n                }"}],"metrics":[],"references":["https://git.kernel.org/stable/c/56036bdc445c468b1defd1780ed2af4a3fc7ddb2","https://git.kernel.org/stable/c/2c0a8cc97a9d970a252f17aa0bbf4588768f7aad","https://git.kernel.org/stable/c/e7ce2bad0c33471c8da4dd73dff2119a68f96f3a","https://git.kernel.org/stable/c/72f2b4516faf55d4dfac2414649d3cffa5fd2c5e"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2026-74558","license":"CVE Program Terms of Use","key":"cve-program:CVE-2026-74558","identifiers":["CVE-2026-74558"]},"retained":false,"historicalAffected":[]}],"coverage":[{"source":"cisa-kev:global","scope":"Complete CISA KEV catalog; all vendors. Missing entries do not establish absence of exploitation.","generation":"2026-11-08T10:04:32.7352320+00:00","complete":true,"records":1769,"lastAttemptAt":"2026-11-08T10:04:32.735232+00:00","lastSuccessAt":"2026-11-08T10:04:32.956954+00:00","error":null,"lastVerifiedAt":"2026-11-08T10:04:32.9569616+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"cve-program","scope":"Official CVE Program baseline and cumulative hourly delta; all vendors, published and rejected records","generation":"cve-eaa64dac63caa79c8d4905619258c41c51b39e461b996124e1a21b5e85e7e738-e58a079eb6f76d5949b871c295ad9e8f78e928765ff9950581a38d46375b9852","complete":true,"records":421096,"lastAttemptAt":"2026-11-08T11:04:36.6753622+00:00","lastSuccessAt":"2026-11-08T07:59:14.3145447+00:00","error":"HttpRequestException","lastVerifiedAt":"2026-11-08T07:59:14.338564+00:00","snapshotPublishedAt":"2026-11-08T07:27:32+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"euvd","scope":"Rolling EUVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global EUVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-ce0df89a405747cda5b7c61ae0b48fb2","complete":true,"records":13633,"lastAttemptAt":"2026-11-08T10:04:58.8018093+00:00","lastSuccessAt":"2026-11-08T05:08:40.263+00:00","error":null,"lastVerifiedAt":"2026-11-08T05:08:40.263+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13685,"expectedIdentifiers":13685,"failedIdentifiers":0},{"source":"first-epss:nuget","scope":"FIRST EPSS for explicit CVE aliases in the collected public NuGet archive. Not a global EPSS backfill.","generation":"2026-11-08T10:04:32.7352320+00:00","complete":true,"records":1096,"lastAttemptAt":"2026-11-08T10:04:32.735232+00:00","lastSuccessAt":"2026-11-08T10:04:32.958305+00:00","error":null,"lastVerifiedAt":"2026-11-08T10:04:32.9583056+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"nvd","scope":"Rolling NVD lookups of CVE aliases in current public OSV archives; 500 identifiers per refresh, rechecked after 48 hours. Not a global NVD catalog. Successful not-found lookups count as checked; they do not imply withdrawal or safety. No reader inventory is sent.","generation":"enrichment-2ca35de6f6b748bea5c32f6d843eca15","complete":true,"records":13645,"lastAttemptAt":"2026-11-08T10:04:58.1666994+00:00","lastSuccessAt":"2026-11-08T10:04:58.163+00:00","error":null,"lastVerifiedAt":"2026-11-08T10:04:58.163+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13685,"expectedIdentifiers":13685,"failedIdentifiers":0},{"source":"osv:Go","scope":"Complete OSV Go ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"go-0eb4d6dde62dffacd040ad992d4fd5a65cd7d0dc5f5f4cfa8b41967fc6f9ca5f","complete":true,"records":9914,"lastAttemptAt":"2026-11-08T10:04:32.5160062+00:00","lastSuccessAt":"2026-11-06T20:10:36.6450506+00:00","error":null,"lastVerifiedAt":"2026-11-08T10:04:32.5160062+00:00","snapshotPublishedAt":"2026-11-06T20:02:57+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:NuGet","scope":"Complete OSV NuGet ecosystem archive, including GitHub Advisory Database records; NuGet version matching only","generation":"nuget-fde804134ecdda0ddd5ff5c26ee1fff5a6fa659311f7ef2e51c6ad54964db0e2","complete":true,"records":1971,"lastAttemptAt":"2026-11-08T11:04:36.8284473+00:00","lastSuccessAt":"2026-11-06T19:03:17.0399903+00:00","error":null,"lastVerifiedAt":"2026-11-08T11:04:36.8284473+00:00","snapshotPublishedAt":"2026-11-06T18:17:57+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:crates.io","scope":"Complete OSV crates.io ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"crates.io-335633e78a15c9cde10a6025895b5617717087fb945489ae7e15d377bacf34a9","complete":true,"records":3055,"lastAttemptAt":"2026-11-08T10:04:32.6972338+00:00","lastSuccessAt":"2026-11-06T16:03:00.7615789+00:00","error":null,"lastVerifiedAt":"2026-11-08T10:04:32.6972338+00:00","snapshotPublishedAt":"2026-11-06T16:02:48+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null},{"source":"osv:npm","scope":"Complete OSV npm ecosystem archive, including withdrawn and malicious-package source records; statement counts are not unique CVE counts","generation":"npm-8efbf882841c7fda0cba0c3b55677f4781f461b96ab83577ad2701c4eaf88b1e","complete":true,"records":231293,"lastAttemptAt":"2026-11-08T10:04:32.4139557+00:00","lastSuccessAt":"2026-11-08T08:01:14.837451+00:00","error":null,"lastVerifiedAt":"2026-11-08T10:04:32.4139557+00:00","snapshotPublishedAt":"2026-11-08T07:33:16+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}