HIGH Introduced in 4.14
cls_u32 BindClass OOB
CVE-2026-74739
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
KernelScan AI3.3LOW
01Description
In the Linux kernel, the following vulnerability has been resolved: net/sched: cls_u32: skip hash tables in u32_bind_class() u32_walk() enumerates both struct tc_u_hnode and struct tc_u_knode through the walker callback. u32_bind_class() unconditionally casts the passed fh to tc_u_knode and accesses &n->res, so when fh is actually a tc_u_hnode, which has no tcf_result member, this results in a slab-out-of-bounds read of res->classid in tc_cls_bind_class(). The issue can be reproduced with the following commands: tc qdisc add dev lo root handle 1: hfsc tc class add dev lo parent 1: classid 1:1 hfsc sc rate 1000kbit tc filter add dev lo parent 1:1 protocol ip prio 1 u32 match u32 0 0 flowid 1:1 tc class add dev lo parent 1: classid 1:2 hfsc sc rate 2000kbit Fix this by skipping hash tables via the TC_U32_KEY(handle) check.
02KernelScan AI Analysis
Risk summary
A local user who can obtain CAP_NET_ADMIN (e.g., inside a user namespace) can trigger an out-of-bounds slab read in the u32 traffic classifier by adding qdiscs, classes, and filters in a specific order. The read is bounded and consumed only by an internal comparison, limiting impact to a potential kernel oops under debug configurations. Products that block unprivileged user namespaces or restrict netlink access are not exposed.
Vulnerability analysis
When a new traffic-control class is created, the kernel walks all attached u32 filters to bind matching class IDs. The walk visits both hash-table nodes and key nodes, but the binding function unconditionally treats every visited handle as a key node and reads a result field that only exists on key nodes. When the handle is actually a hash-table node, this reads past the end of the slab object. The fix adds a type check so hash-table handles are skipped before the field is accessed. The vulnerable path is reached through netlink tc configuration commands that require CAP_NET_ADMIN, which an unprivileged local user can obtain inside a user namespace; a network management daemon holding that capability could also trigger it.
Lifecycle
03Fix Versions
| Branch | Introduced | Fixed in | Patch commit |
|---|---|---|---|
| 6.6 | 4.14 | 6.6.153 | 19d114b93c94 |
| 6.12 | 4.14 | 6.12.105 | 594a064d6032 |
| 6.18 | 4.14 | 6.18.46 | 31f26a95eeee |
| mainline | 4.14 | 7.2 | 6d3724e616fa |
| 7.1 | 4.14 | 7.1.10 | e71f8e9ed6f3 |
| 6.1 | 4.14 | 6.1.184 | ec5f3005586a |
| cip/6.1 | 4.14 | 6.1.187-cip60 | ec5f3005586a |
| cip/6.12 | 4.14 | 6.12.108-cip31 | 594a064d6032 |