Skip to main content
VulnerabilityPublished Updated

CVE-2026-98811: Linux kernel · net/sched: cls_api: reclaim an empty proto on the error path

Affects Linux kernelSource CVE Database V5

0

Not known to be exploited · fixed in ebc9611ab154c0cd9f1320e2a73f5e936d7535a9 : update Linux kernel when convenient.

Data as of 26 Oct 2026, 13:47 UTC

Severity
Unrated

Rated by Threat Radar · CVSS not yet scored by NVD

EPSS
0.1% chance of exploitation in 30 days – higher than 5% of CVEsExploit Prediction Scoring System: the likelihood attackers will use this flaw soon.
Patch
Available – fixed in ebc9611ab154c0cd9f1320e2a73f5e936d7535a9, 570141625d212fbbcffb9665cb45c0f04610e61a, 315e4fe65cf02ef052de5e6298c3088e448b7517 +2

Exploitation evidence

  1. Disclosed: evidence found.

    CVE published 18 Oct 2026

  2. Detectable: no evidence on record.

    No public nuclei template indexed

  3. Weaponised: no evidence on record.

    No public exploit code indexed in Metasploit or Exploit-DB

  4. Exploited in the wild: no evidence on record.

    Not in CISA KEV and no source reports exploitation

  5. Observed by OffSeq Mirage: no evidence on record.

    No attack traffic recorded by OffSeq Mirage sensors

A missing step is not evidence of safety. Sources: cve.org (opens in a new tab), the Metasploit, Exploit-DB and nuclei-templates index as of 26 Oct 2026.

What to do

Upgrade to a fixed release listed under Affected software.

Affected software

ProductAffectedFixed in
LinuxLinuxAffected
  • ≥ 8b64678e0af8f4d62a40149baedebe78503a5255, < ebc9611ab154c0cd9f1320e2a73f5e936d7535a9
Fixed in
  • ebc9611ab154c0cd9f1320e2a73f5e936d7535a9
LinuxLinuxAffected
  • ≥ 8b64678e0af8f4d62a40149baedebe78503a5255, < 570141625d212fbbcffb9665cb45c0f04610e61a
Fixed in
  • 570141625d212fbbcffb9665cb45c0f04610e61a
LinuxLinuxAffected
  • ≥ 8b64678e0af8f4d62a40149baedebe78503a5255, < 315e4fe65cf02ef052de5e6298c3088e448b7517
Fixed in
  • 315e4fe65cf02ef052de5e6298c3088e448b7517
LinuxLinuxAffected
  • ≥ 8b64678e0af8f4d62a40149baedebe78503a5255, < 0fc74e7d97d232095ce64cb45d25f0919df7ad4a
Fixed in
  • 0fc74e7d97d232095ce64cb45d25f0919df7ad4a
LinuxLinuxAffected
  • ≥ 8b64678e0af8f4d62a40149baedebe78503a5255, < 0bb8eab29b55045281a4963d4557f2776cdf8cfa
Fixed in
  • 0bb8eab29b55045281a4963d4557f2776cdf8cfa
LinuxLinuxAffected
  • =5.1
Fixed in–

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)

References

Community reviews

Loading reviews…