{"id":"CVE-2025-21702","revision":null,"records":[{"revision":"5e95980066d24788b29cfc94ec54a8fc","observedAt":"2026-10-23T15:48:27.903+00:00","statement":{"source":"cve-program","id":"CVE-2025-21702","aliases":[],"title":"pfifo_tail_enqueue: Drop new packet when sch->limit == 0","description":"In the Linux kernel, the following vulnerability has been resolved:\n\npfifo_tail_enqueue: Drop new packet when sch->limit == 0\n\nExpected behaviour:\nIn case we reach scheduler's limit, pfifo_tail_enqueue() will drop a\npacket in scheduler's queue and decrease scheduler's qlen by one.\nThen, pfifo_tail_enqueue() enqueue new packet and increase\nscheduler's qlen by one. Finally, pfifo_tail_enqueue() return\n`NET_XMIT_CN` status code.\n\nWeird behaviour:\nIn case we set `sch->limit == 0` and trigger pfifo_tail_enqueue() on a\nscheduler that has no packet, the 'drop a packet' step will do nothing.\nThis means the scheduler's qlen still has value equal 0.\nThen, we continue to enqueue new packet and increase scheduler's qlen by\none. In summary, we can leverage pfifo_tail_enqueue() to increase qlen by\none and return `NET_XMIT_CN` status code.\n\nThe problem is:\nLet's say we have two qdiscs: Qdisc_A and Qdisc_B.\n - Qdisc_A's type must have '->graft()' function to create parent/child relationship.\n   Let's say Qdisc_A's type is `hfsc`. Enqueue packet to this qdisc will trigger `hfsc_enqueue`.\n - Qdisc_B's type is pfifo_head_drop. Enqueue packet to this qdisc will trigger `pfifo_tail_enqueue`.\n - Qdisc_B is configured to have `sch->limit == 0`.\n - Qdisc_A is configured to route the enqueued's packet to Qdisc_B.\n\nEnqueue packet through Qdisc_A will lead to:\n - hfsc_enqueue(Qdisc_A) -> pfifo_tail_enqueue(Qdisc_B)\n - Qdisc_B->q.qlen += 1\n - pfifo_tail_enqueue() return `NET_XMIT_CN`\n - hfsc_enqueue() check for `NET_XMIT_SUCCESS` and see `NET_XMIT_CN` => hfsc_enqueue() don't increase qlen of Qdisc_A.\n\nThe whole process lead to a situation where Qdisc_A->q.qlen == 0 and Qdisc_B->q.qlen == 1.\nReplace 'hfsc' with other type (for example: 'drr') still lead to the same problem.\nThis violate the design where parent's qlen should equal to the sum of its childrens'qlen.\n\nBug impact: This issue can be used for user->kernel privilege escalation when it is reachable.","state":0,"publishedAt":"2025-02-18T14:37:43.429+00:00","modifiedAt":"2026-10-15T01:03:23.498+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                        \"net/sched/sch_fifo.c\"\n                    ],\n                    \"versions\": [\n                        {\n                            \"version\": \"57dbb2d83d100ea601c54fe129bfde0678db5dee\",\n                            \"lessThan\": \"78285b53266d6d51fa4ff504a23df03852eba84e\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"57dbb2d83d100ea601c54fe129bfde0678db5dee\",\n                            \"lessThan\": \"7a9723ec27aff5674f1fd4934608937f1d650980\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"57dbb2d83d100ea601c54fe129bfde0678db5dee\",\n                            \"lessThan\": \"a56a6e8589a9b98d8171611fbcc1e45a15fd2455\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"57dbb2d83d100ea601c54fe129bfde0678db5dee\",\n                            \"lessThan\": \"020ecb76812a0526f4130ab5aeb6dc7c773e7ab9\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"57dbb2d83d100ea601c54fe129bfde0678db5dee\",\n                            \"lessThan\": \"79a955ea4a2e5ddf4a36328959de0de496419888\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"57dbb2d83d100ea601c54fe129bfde0678db5dee\",\n                            \"lessThan\": \"e40cb34b7f247fe2e366fd192700d1b4f38196ca\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"57dbb2d83d100ea601c54fe129bfde0678db5dee\",\n                            \"lessThan\": \"b6a079c3b6f95378f26e2aeda520cb3176f7067b\",\n                            \"status\": \"affected\",\n                            \"versionType\": \"git\"\n                        },\n                        {\n                            \"version\": \"57dbb2d83d100ea601c54fe129bfde0678db5dee\",\n                            \"lessThan\": \"647cef20e649c576dff271e018d5d15d998b629d\",\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                        \"net/sched/sch_fifo.c\"\n                    ],\n                    \"versions\": [\n                        {\n                            \"version\": \"2.6.34\",\n                            \"status\": \"affected\"\n                        },\n                        {\n                            \"version\": \"0\",\n                            \"lessThan\": \"2.6.34\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"5.4.291\",\n                            \"lessThanOrEqual\": \"5.4.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"5.10.235\",\n                            \"lessThanOrEqual\": \"5.10.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"5.15.179\",\n                            \"lessThanOrEqual\": \"5.15.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.1.130\",\n                            \"lessThanOrEqual\": \"6.1.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.6.83\",\n                            \"lessThanOrEqual\": \"6.6.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.12.14\",\n                            \"lessThanOrEqual\": \"6.12.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.13.3\",\n                            \"lessThanOrEqual\": \"6.13.*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"semver\"\n                        },\n                        {\n                            \"version\": \"6.14\",\n                            \"lessThanOrEqual\": \"*\",\n                            \"status\": \"unaffected\",\n                            \"versionType\": \"original_commit_for_fix\"\n                        }\n                    ]\n                }"}],"metrics":[{"system":"CVSS 3.1","vector":"CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H","score":7.8,"severity":"HIGH"}],"references":["https://git.kernel.org/stable/c/78285b53266d6d51fa4ff504a23df03852eba84e","https://git.kernel.org/stable/c/7a9723ec27aff5674f1fd4934608937f1d650980","https://git.kernel.org/stable/c/a56a6e8589a9b98d8171611fbcc1e45a15fd2455","https://git.kernel.org/stable/c/020ecb76812a0526f4130ab5aeb6dc7c773e7ab9","https://git.kernel.org/stable/c/79a955ea4a2e5ddf4a36328959de0de496419888","https://git.kernel.org/stable/c/e40cb34b7f247fe2e366fd192700d1b4f38196ca","https://git.kernel.org/stable/c/b6a079c3b6f95378f26e2aeda520cb3176f7067b","https://git.kernel.org/stable/c/647cef20e649c576dff271e018d5d15d998b629d"],"sourceUrl":"https://www.cve.org/CVERecord?id=CVE-2025-21702","license":"CVE Program Terms of Use","key":"cve-program:CVE-2025-21702","identifiers":["CVE-2025-21702"]},"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-09T19:02:11.0282238+00:00","complete":true,"records":1772,"lastAttemptAt":"2026-11-09T19:02:11.0282238+00:00","lastSuccessAt":"2026-11-09T19:02:11.2511726+00:00","error":null,"lastVerifiedAt":"2026-11-09T19:02:11.2511728+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-24e6fde7b744113daefb8f6135035fb8a5c69c9617c9c0d40574a0376532ffd3-da82b7f3c08c0a1c809bacbfac0a567c645c18f0205247304bfc7e4ee4c02653","complete":true,"records":421491,"lastAttemptAt":"2026-11-09T19:02:10.4293016+00:00","lastSuccessAt":"2026-11-09T18:02:17.6122603+00:00","error":null,"lastVerifiedAt":"2026-11-09T19:02:10.4293016+00:00","snapshotPublishedAt":"2026-11-09T17:19:01+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-f1df18dfb77f437e9e2ee1dd548e1f15","complete":false,"records":13655,"lastAttemptAt":"2026-11-09T19:14:35.1855237+00:00","lastSuccessAt":"2026-11-09T19:14:35.178+00:00","error":null,"lastVerifiedAt":"2026-11-09T19:14:35.178+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13398,"expectedIdentifiers":13707,"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-09T19:02:11.0282238+00:00","complete":true,"records":1096,"lastAttemptAt":"2026-11-09T19:02:11.0282238+00:00","lastSuccessAt":"2026-11-09T19:02:11.2551731+00:00","error":null,"lastVerifiedAt":"2026-11-09T19:02:11.2551735+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-9c7aae9a77ad4fe48f16e3014ae326fa","complete":true,"records":13667,"lastAttemptAt":"2026-11-09T19:02:43.2420437+00:00","lastSuccessAt":"2026-11-09T19:02:43.234+00:00","error":null,"lastVerifiedAt":"2026-11-09T19:02:43.234+00:00","snapshotPublishedAt":null,"importing":false,"stagedRecords":0,"checkedIdentifiers":13707,"expectedIdentifiers":13707,"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-980593e6977a6d1b4fb1eed5a1ffe88a468736f89f0a06f710924ad59132c023","complete":true,"records":9914,"lastAttemptAt":"2026-11-09T19:02:10.7853332+00:00","lastSuccessAt":"2026-11-08T11:07:07.068788+00:00","error":null,"lastVerifiedAt":"2026-11-09T19:02:10.7853332+00:00","snapshotPublishedAt":"2026-11-08T11:02:46+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-712163772d637a9cfaa34d4241efb9e9d0ccd6149596c672c613d362f44af841","complete":true,"records":1971,"lastAttemptAt":"2026-11-09T19:02:10.5860178+00:00","lastSuccessAt":"2026-11-09T18:02:23.0088273+00:00","error":null,"lastVerifiedAt":"2026-11-09T19:02:10.5860178+00:00","snapshotPublishedAt":"2026-11-09T17:03:01+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-761ecc9061239b0da572dc9254c6f384c1d19339eb08408c436647a2f26129e9","complete":true,"records":3064,"lastAttemptAt":"2026-11-09T19:02:10.8954054+00:00","lastSuccessAt":"2026-11-09T17:05:03.4044794+00:00","error":null,"lastVerifiedAt":"2026-11-09T19:02:10.8954054+00:00","snapshotPublishedAt":"2026-11-09T16:33:20+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-e3fec63b2a5926ae79916bc9569f5c1069b095db78f2be319f909e69e8e6d7d3","complete":true,"records":231313,"lastAttemptAt":"2026-11-09T19:02:10.6843987+00:00","lastSuccessAt":"2026-11-09T18:04:48.1910635+00:00","error":null,"lastVerifiedAt":"2026-11-09T19:02:10.6843987+00:00","snapshotPublishedAt":"2026-11-09T17:33:10+00:00","importing":false,"stagedRecords":0,"checkedIdentifiers":null,"expectedIdentifiers":null,"failedIdentifiers":null}]}