← All Advisories
Reported from OT-Advisories.com as of

Linux Kernel cgroup v1/v2 Vulnerability Rated 7.8 CVSS

Last refreshed2026-10-15

Status: UPDATED  |  Advisory ID: CVE-2026-74700

Key Details

CVECVE-2026-74700
CVSS Score / Version
7.8 (High) / CVSS v3.1
Updated2026-10-14
CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
CVSS Prose
attack vector is local; attack complexity is low; privileges required is low; user interaction is none; scope is unchanged; confidentiality impact is high; integrity impact is high; availability impact is high.
Affected products
Linux Kernel
Exploitation prediction (EPSS)
0.12% probability of exploitation in the next 30 days (2% percentile) -- FIRST.org's EPSS model.

Affected Products, Subsystems & Sectors

VendorProductAffected VersionsPatch Status
LinuxLinux Kernel
SubsystemsOT Supporting Infrastructure
SectorsAll Sectors

What to Know

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

net/sched: cls_api: Always acquire rtnl_lock when destroying locked classifiers

Another challenge with unlocked filters.

There is a short window in tc_new_tfilter where a tcf_proto can be found

and briefly referenced by a totally unrelated, unlocked classifier's request

and cause a race.

Feng created a poc which created this race with two threads, one creating a

u32 filter and other a flower filter in the same chain/prio:

1. Both threads enter tc_new_tfilter, both find the chain empty, both

drop filter_chain_lock

2. u32 finishes tcf_proto_create("u32") first, calls

tcf_chain_tp_insert_unique() -> inserts u32_tp into the chain

3. flower finishes tcf_proto_create("flower") later, calls

tcf_chain_tp_insert_unique() -> tcf_chain_tp_find() now sees u32_tp

already there, takes a reference on it, destroys flower's own tp_new

and returns u32_tp to the caller.

Flower then hits the kind mismatch check (because it requested for kind

"flower" but tp->ops->kind is "u32") and goes through the errout path

which calls tcf_proto_put() on u32_tp. If the u32 thread has already

gone through its own errout (its change() call failed on the PoC's empty

options) and dropped its create and insert refs, flower's put is the

last one and drops u32_tp's refcnt to zero.

At this point tp->ops->destroy() runs in a context that never took

rtnl_lock. When that happens, it might cause a UAF like the following

(illustrated by the PoC):

[ +0.000710] BUG: KASAN: slab-use-after-free in u32_init (net/sched/cls_u32.c:393)

[ +0.000281] Read of size 8 at addr ffff888120022f00 by task poc_feng_xue/524

Call Trace:

u32_init (net/sched/cls_u32.c:393)

tc_new_tfilter (net/sched/cls_api.c:2378)

Allocated by task 526:

u32_init (net/sched/cls_u32.c:378)

tc_new_tfilter (net/sched/cls_api.c:2378)

Freed by task 522:

kfree

u32_destroy (net/sched/cls_u32.c:662)

tcf_proto_destroy (net/sched/cls_api.c:446)

tcf_proto_put (net/sched/cls_api.c:459)

tc_new_tfilter (net/sched/cls_api.c:2459)

Fix this by having tcf_proto_destroy() take rtnl_lock around

tp->ops->destroy() for locked classifiers whenever rtnl is not held.

To explain why I used a temp variable "not_lockless" I'd like to point to a

semi-related note on rtnl_held vs TCF_PROTO_OPS_DOIT_UNLOCKED (adding here

for future cleanup if deemed necessary):

The rtnl_held parameter and the TCF_PROTO_OPS_DOIT_UNLOCKED flag are

redundant sources of truth for whether rtnl_lock is held. Among the nine

classifier destroy(..rtnl_held..) callbacks, only flower consults the

rtnl_held parameter which it propagates to tc_setup_cb_destroy()

and tc_setup_cb_call(). The other eight (u32, flow, bpf, cgroup, route, basic,

fw, mall) ignore it entirely;-> those that call tc_setup_cb_destroy()

(u32, bpf, mall) hardcode true always instead of forwarding the parameter.

A future cleanup should remove the rtnl_held parameter from the destroy callback

signature entirely and have callers rely solely on their knowledge whether

they are running in an unlocked context. (NVD)

What to Do

Monitor Linux's web page for any future patch releases.

References

SourceReference
NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-74700
CVEhttps://www.cve.org/CVERecord?id=CVE-2026-74700
Report compilation © 2026 OT-Advisories.com  ·  CC BY 4.0  ·  Source materials remain the property of their respective publishers as cited.