net/sched: cls_api: reclaim an empty proto on the error path
Summary
| CVE | CVE-2026-98811 |
|---|---|
| State | PUBLISHED |
| Assigner | Linux |
| Source Priority | CVE Program / NVD first with legacy fallback |
| Published | 2026-10-18 16:17:35 UTC |
| Updated | 2026-10-21 13:21:47 UTC |
| Description | In the Linux kernel, the following vulnerability has been resolved: net/sched: cls_api: reclaim an empty proto on the error path Two racing tc filter add requests on the same chain/prio of an unlocked classifier both run change() on the shared proto and both can fail: the winner's tcf_chain_tp_delete_empty() attempt gives up because the loser's handle is still in the idr, and the loser's error path drops only its own reference without a second reclamation attempt. The empty proto stays linked in the chain, holding the chain reference, a block reference and the classifier module reference until the chain or block is torn down. Reclaim the proto on the error path of any failed request that holds a proto reference. The reclamation is emptiness-gated: tcf_chain_tp_delete_empty() unlinks the proto only when delete_empty() admits it is empty, so a live shared proto is never unlinked. A proto the request created is reclaimed unconditionally - it is the only owner, so marking it for deletion is safe even without a delete_empty callback. Classifiers without one (the check marks the proto unconditionally) are rtnl-serialized, so the raced window this guard closes cannot arise for them. This is a follow-up to commit d4e359b3608a ("net/sched: cls_api: fix teardown of an adopted proto on insert-race loss"), which stopped the loser of the insert race from unlinking the winner's live proto but left the empty-proto residual in place. Conditions to recreate: - CONFIG_NET_CLS_FLOWER=y; veth pair - tc qdisc add dev veth0 ingress - two concurrent `tc filter add dev veth0 ingress protocol ip pref 1 flower skip_sw ... action drop` (both fail in fl_hw_replace_filter after publishing their handle in the idr); repeat in a loop - an empty flower tp stays linked after both requests fail; visible as a bare `filter protocol ip pref 1 flower chain 0` header in `tc filter show` with no filter entries - CAP_NET_ADMIN (namespace-local via unshare -Urn suffices) |
Risk And Classification
EPSS: 0.001680000 probability, percentile 0.057470000 (date 2026-10-21)
Vendor Declared Affected Products
| Source | Vendor | Product | Version | Platforms |
|---|---|---|---|---|
| CNA | Linux | Linux | affected 8b64678e0af8f4d62a40149baedebe78503a5255 0fc74e7d97d232095ce64cb45d25f0919df7ad4a git | Not specified |
| CNA | Linux | Linux | affected 8b64678e0af8f4d62a40149baedebe78503a5255 315e4fe65cf02ef052de5e6298c3088e448b7517 git | Not specified |
| CNA | Linux | Linux | affected 8b64678e0af8f4d62a40149baedebe78503a5255 ebc9611ab154c0cd9f1320e2a73f5e936d7535a9 git | Not specified |
| CNA | Linux | Linux | affected 8b64678e0af8f4d62a40149baedebe78503a5255 570141625d212fbbcffb9665cb45c0f04610e61a git | Not specified |
| CNA | Linux | Linux | affected 8b64678e0af8f4d62a40149baedebe78503a5255 0bb8eab29b55045281a4963d4557f2776cdf8cfa git | Not specified |
| CNA | Linux | Linux | affected 5.1 | Not specified |
| CNA | Linux | Linux | unaffected 5.1 semver | Not specified |
| CNA | Linux | Linux | unaffected 6.6.160 6.6.* semver | Not specified |
| CNA | Linux | Linux | unaffected 6.12.113 6.12.* semver | Not specified |
| CNA | Linux | Linux | unaffected 6.18.56 6.18.* semver | Not specified |
| CNA | Linux | Linux | unaffected 7.2.10 7.2.* semver | Not specified |
| CNA | Linux | Linux | unaffected 7.3 * original_commit_for_fix | Not specified |
References
| Reference | Source | Link | Tags |
|---|---|---|---|
| git.kernel.org/stable/c/0bb8eab29b55045281a4963d4557f2776cdf8cfa | 416baaa9-dc9f-4396-8d5f-8c081fb06d67 | git.kernel.org | |
| git.kernel.org/stable/c/ebc9611ab154c0cd9f1320e2a73f5e936d7535a9 | 416baaa9-dc9f-4396-8d5f-8c081fb06d67 | git.kernel.org | |
| git.kernel.org/stable/c/315e4fe65cf02ef052de5e6298c3088e448b7517 | 416baaa9-dc9f-4396-8d5f-8c081fb06d67 | git.kernel.org | |
| git.kernel.org/stable/c/0fc74e7d97d232095ce64cb45d25f0919df7ad4a | 416baaa9-dc9f-4396-8d5f-8c081fb06d67 | git.kernel.org | |
| git.kernel.org/stable/c/570141625d212fbbcffb9665cb45c0f04610e61a | 416baaa9-dc9f-4396-8d5f-8c081fb06d67 | git.kernel.org | |
| CVE Program record | CVE.ORG | www.cve.org | canonical |
| NVD vulnerability detail | NVD | nvd.nist.gov | canonical, analysis |
No vendor comments have been submitted for this CVE.
There are currently no legacy QID mappings associated with this CVE.