CVE-2026-90248

net/sched: cls_api: fix teardown of an adopted proto on insert-race loss

State
Published
Severity
Not scored
Published
Sep 17, 2026
Updated
Oct 19, 2026
Reserved
Sep 11, 2026

Read the record on cve.org

Description

In the Linux kernel, the following vulnerability has been resolved:

net/sched: cls_api: fix teardown of an adopted proto on insert-race loss

In tc_new_tfilter() the create branch sets tp_created = 1 before calling tcf_chain_tp_insert_unique(). When the caller loses the race (another request inserted a proto at the same chain/prio first), insert_unique() destroys the caller's own tp_new and returns the winner's proto with an extra reference. tp_created was never cleared, so the loser's errout path treated the winner's live proto as its own and called tcf_chain_tp_delete_empty() on it, silently unlinking an active classifier that the winning request already advertised via RTM_NEWTFILTER.

Track the outcome of the insert step in a single tri-state variable so each errout path reacts correctly:

- TP_NOT_CREATED: no proto created; pursue the old path. - TP_CREATED: proto inserted successfully; same code path as before. - TP_NOT_OWNED: New - lost the insert race; tp is another request's proto (chain ref already released by tp_new's destroy)

Both errout reactions are single expressions derived from the state.

This fix is motivated by the Sashiko's automated review of Patch (net/sched: cls_api: Always acquire rtnl_lock when destroying locked classifiers) [1][2]. The review identified the silent-unlink behaviour of an adopted proto's teardown when a request loses the tcf_chain_tp_insert_unique() race.

[1] https://sashiko.dev/#/patchset/20260801125632.360365-1-jhs%40mojatatu.com [2] https://netdev-ai.bots.linux.dev/sashiko/#/patchset/20260801125632.360365-1-jhs%40mojatatu.com

Scores

The record has no CVSS score.

Weaknesses

The record names no weakness.

Affected Products

ProductVersions
LinuxLinux
  • 8b64678e0af8f4d62a40149baedebe78503a5255 to before a68e664ddf16ecae6d769d6a2eb356f8abab75c9Affected
  • 8b64678e0af8f4d62a40149baedebe78503a5255 to before df02b6dc136af45e92ee4c86f4aa6c9a60790b1eAffected
  • 8b64678e0af8f4d62a40149baedebe78503a5255 to before bee2208276c8e0e40a249ffdcf6e5434a79a847cAffected
  • 8b64678e0af8f4d62a40149baedebe78503a5255 to before 219c87aeefdcc8c1caf28cc99e9b361ce7393d3aAffected
  • 8b64678e0af8f4d62a40149baedebe78503a5255 to before bbe2fd6d77df630356185406a97317f6aa6a92cfAffected
  • 8b64678e0af8f4d62a40149baedebe78503a5255 to before dc8b33b819cb02a75936940c120aa669ad89942dAffected
  • 8b64678e0af8f4d62a40149baedebe78503a5255 to before d4e359b3608a0e184bbe8d61a5c3b50d0831c44aAffected
LinuxLinux
  • 5.1Affected
  • before 5.1Not affected
  • 5.15.221 through 5.15.*Not affected
  • 6.1.188 through 6.1.*Not affected
  • 6.6.157 through 6.6.*Not affected
  • 6.12.110 through 6.12.*Not affected
  • 6.18.52 through 6.18.*Not affected
  • 7.2.6 through 7.2.*Not affected
  • 7.3 and laterNot affected

References

Every record here comes from the CVE Program’s CVE List. © 1999–2026 The MITRE Corporation. CVE is a registered trademark of The MITRE Corporation. The records are reproduced under the CVE Program terms of use.