CVE-2026-74620 json
net/sched: act_gact, act_police: range check the fallback control action
published 2026-08-22 2 mo ago modified 2026-11-06 3 d ago also EUVD-2026-64557
- cvss
- —
- not scored
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.2%
- EPSS 0.2% chance of exploitation in 30 days, percentile 7%
- public exploits
- 0
- none known
Summary
In the Linux kernel, the following vulnerability has been resolved:
net/sched: act_gact, act_police: range check the fallback control action
tcf_action_check_ctrlact() range checks the primary control action:
if (!opcode) ret = action > TC_ACT_VALUE_MAX ? -EINVAL : 0;
TC_ACT_VALUE_MAX is TC_ACT_TRAP, so kernel-internal verdicts above it cannot be set that way. But act_gact and act_police each carry a second, independent control action supplied by user space that never reaches that helper - TCA_GACT_PROB.paction and TCA_POLICE_RESULT. Both only reject TC_ACT_GOTO_CHAIN, so any other value is stored verbatim and returned verbatim from the action.
In particular user space can store TC_ACT_CONSUMED, which is TC_ACT_VALUE_MAX + 1 and is deliberately not part of the UAPI value range. That verdict tells every caller the action took ownership of the skb, so nobody frees it: sch_handle_ingress(), sch_handle_egress() and tcf_qevent_handle() all deliberately skip the free for it. The result is one leaked sk_buff plus its data buffer per packet traversing the filter, unbounded, for all traffic on the chain including kernel-generated packets.
Both are trivially deterministic. act_gact clamps tcfg_pval to >= 1, so with pval = 1 gact_determ() returns the fallback for every packet. act_police has no mandatory rate, so rate = 0 leaves tcfp_mtu = ~0 and tcf_police_mtu_check() always passes.
TC_ACT_CONSUMED was added by commit 720f22fed81b ("net: sched: refactor reinsert action"), after both goto-chain guards were written: commit 9469f375ab09 ("net/sched: act_gact: disallow 'goto chain' on fallback control action") and commit c08f5ed5d625 ("net/sched: act_police: disallow 'goto chain' on fallback control action"). Neither guard was widened when the new verdict appeared.
Factor the existing range test out of tcf_action_check_ctrlact() as tcf_action_valid() and apply it to both fallbacks. The helper cannot call tcf_action_check_ctrlact() directly because that also allocates a goto_chain, which is exactly what these two sites must not do.
Reproduced on v7.2-rc6: kmemleak reports one leaked 232-byte skbuff_head_cache object plus its 704-byte data buffer per packet. With this patch both configurations are rejected with -EINVAL and kmemleak reports none.
Patch / fix
- Linux Linux 5.10.266, 5.15.216, 6.1.183, 6.6.152, 6.12.104, 6.18.45, 7.1.9, 7.2
- linux Debian 12 6.1.187-1
- linux Debian 13 6.12.105-1
- linux Debian 14 7.1.9-1
- linux-6.12 Debian 12 6.12.107-1~deb12u1
debian advisories DEBIAN-CVE-2026-74620
- linux Ubuntu 22.04 LTS 5.15.0-198.208
- linux Ubuntu 26.04 LTS 7.0.0-42.42
- linux-aws Ubuntu 22.04 LTS 5.15.0-1117.124
- linux-aws Ubuntu 26.04 LTS 7.0.0-1016.17
- linux-gcp Ubuntu 22.04 LTS 5.15.0-1118.128
- linux-gcp Ubuntu 26.04 LTS 7.0.0-1016.18
- linux-gke Ubuntu 22.04 LTS 5.15.0-1113.119
- linux-ibm Ubuntu 22.04 LTS 5.15.0-1111.115
ubuntu advisories UBUNTU-CVE-2026-74620
Ubuntu security data © Canonical Ltd., from https://github.com/canonical/ubuntu-security-notices via OSV; changed: normalised to fixed package versions per release. CC BY-SA 4.0
- kernel-source Linux Micro 6.0 6.4.0-159998.55.1
- kernel-default Linux Micro 6.0 6.4.0-159998.55.1
- kernel-kvmsmall Linux Micro 6.0 6.4.0-159998.55.1
- kernel-default-base Linux Micro 6.0 6.4.0-159998.55.1.159998.21.42
- kernel-64kb SLE Module for Basesystem 15 SP7 6.4.0-150700.53.90.1
- kernel-syms SLE Module for Development Tools 15 SP7 6.4.0-150700.53.90.1
- kernel-azure SLE Module for Public Cloud 15 SP7 6.4.0-150700.53.90.1
- kernel-source SLE Module for Development Tools 15 SP7, SLE Module for Basesystem 15 SP7 6.4.0-150700.53.90.1
suse advisories SUSE-SU-2026:5121-1SUSE-SU-2026:24550-1SUSE-SU-2026:5091-1
- git.kernel.org/stable/c/5f038affdacaffedf6a85a06cf59ec0a852d36a7 commit
- git.kernel.org/stable/c/efa58aeb6a99028b1fbc3ab2f31ba3a881211ad4 commit
- git.kernel.org/stable/c/725efc2ab4a40affc4e285a2dc4896d103948a6c commit
- git.kernel.org/stable/c/6bcb8839aa2d686964a4154650afc4db91e1c514 commit
- git.kernel.org/stable/c/5344e01179baa37547ab29fd7b8614f83faa190c commit
- git.kernel.org/stable/c/92f00f1d4d204a428b38e26fce3baee144b6955d commit
- git.kernel.org/stable/c/2e8df8c9190335475a3b64a159d3efd8cdd1cb73 commit
- git.kernel.org/stable/c/883b56ae58fe657d8497806c7059646e9ba6dbd0 commit
Vendor advisories
What the vendors themselves say about their products: affected, fixed or not affected, and what to do.
red hat product security vex CVE-2026-74620 updated cvss 5.5
kernel: net/sched: act_gact, act_police: range check the fallback control action
-
Red Hat Enterprise Linux 6 perf, kernel, python-perf, kernel-kdump, kernel-firmware, kernel-bootwrapper, +1 moreaffected: workaround, no fix planned “Out of support scope”
-
Red Hat Enterprise Linux 8 perf, kernel, bpftool, kernel-rt, kernel-core, kernel-tools, +29 more Red Hat Enterprise Linux 9 rv, perf, rtla, kernel, bpftool, libperf, +83 more Red Hat Enterprise Linux 10 kernelaffected: workaround, no fix available “Fix deferred”
-
Red Hat Enterprise Linux 7 perf, kernel, bpftool, kernel-rt, python-perf, kernel-kdump, +8 morenot affected: vulnerable code not present
Red Hat CSAF VEX © Red Hat, Inc., from https://security.access.redhat.com/data/csaf/v2/vex/; changed: reduced to product statuses and remediations. CC BY 4.0 · csaf
CISA SSVC
- Exploitation
- none
- Automatable
- no
- Technical impact
- partial
- Assessed
- 3 d ago
Exploit prediction
0.18% chance of exploitation in the next 30 days, higher than 7% of all scored CVEs (FIRST EPSS, 2026-11-08).
Affected products
- Linux Linux
Classification
- Technology feeds
References
- git.kernel.org /stable/c/5f038affdacaffedf6a85a06cf59ec0a852d36a7
- git.kernel.org /stable/c/efa58aeb6a99028b1fbc3ab2f31ba3a881211ad4
- git.kernel.org /stable/c/725efc2ab4a40affc4e285a2dc4896d103948a6c
- git.kernel.org /stable/c/6bcb8839aa2d686964a4154650afc4db91e1c514
- git.kernel.org /stable/c/5344e01179baa37547ab29fd7b8614f83faa190c
- git.kernel.org /stable/c/92f00f1d4d204a428b38e26fce3baee144b6955d
- git.kernel.org /stable/c/2e8df8c9190335475a3b64a159d3efd8cdd1cb73
- git.kernel.org /stable/c/883b56ae58fe657d8497806c7059646e9ba6dbd0
Sources
- CVE List CVE-2026-74620
- NVD CVE-2026-74620
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.