CVE-2026-53264 net/sched: act_api: use RCU with deferred freeing for action lifecycle
A race condition in the Linux kernel's traffic control API allows a use-after-free, potentially enabling local attackers to execute code or escalate privileges.
- Exploited in the wild
- Not known
- Login needed
- Any signed-in user
- Attackable
- Local or same network only
- Victim action needed
- Not needed
- Fix
- Available
What is CVE-2026-53264?
CVE-2026-53264 is a high-severity use after free vulnerability in Linux kernel, published on 25 Jun 2026. It can only be exploited from the same machine or local network, with no action from the victim.
Official description
In the Linux kernel, the following vulnerability has been resolved:
net/sched: act_api: use RCU with deferred freeing for action lifecycle
When NEWTFILTER and DELFILTER are run concurrently it is possible to create a race with an associated action.
Let's illustrate with CPU0 running NEWTFILTER and CPU1 running DELFILTER:
0: mutex_lock() <-- holds the idr lock 0: rcu_read_lock() 0: p = idr_find(idr, index) <-- action p is valid (RCU protects IDR) 0: mutex_unlock() <-- releases the idr lock 1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, mutex held 1: idr_remove(idr, index) <-- Action removed from IDR 1: mutex_unlock() <-- mutex released allowing us to delete the action 1: tcf_action_cleanup(p); kfree(p) <-- Kfrees p immediately, no deferral 0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- ouch, UAF p points to freed memory
This patch fixes the race condition between NEWTFILTER and DELFILTER by adding struct rcu_head to tc_action used in the deferral and introducing a call_rcu() in the delete path to defer the final kfree().
Note: this is a revert of commit d7fb60b9cafb ("net_sched: get rid of tcfa_rcu") but also modernization/simplification to directly use kfree_rcu().
Let's illustrate the new restored code path:
0: rcu_read_lock() 1: refcount_dec_and_mutex_lock() <-- refcnt 1->0, mutex held 1: idr_remove(idr, index) 1: mutex_unlock() 1: call_rcu(&p->tcfa_rcu, tcf_action_rcu_free) <-- defer kfree after grace period 0: p = idr_find(idr, index) 0: refcount_inc_not_zero(&p->tcfa_refcnt) <-- fails, refcnt already 0 1: rcu_read_unlock() <-- release so freeing can run after grace period
After CPU1 calls idr_remove(), the object is no longer reachable through the IDR. CPU0's subsequent idr_find() will return NULL, and even if it still held a stale pointer, the immediate kfree() is now deferred until after the RCU grace period, so no UAF can occur.
Weakness: CWE-416
Which versions are affected by CVE-2026-53264?
It affects 1 product.
Linux distribution packages (40)
bpftool-debuginfo Red Hat:rhel_e4s:9.2::appstream | All versions | 0:7.0.0-284.187.1.el9_2 |
kernel-64k-debug-debuginfo Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-debug-devel Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-debug-devel-matched Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-debuginfo Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-devel Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-devel-matched Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-debug-debuginfo Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-debug-devel Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-debug-devel-matched Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-debuginfo Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-debuginfo-common-aarch64 Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-debuginfo-common-ppc64le Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-debuginfo-common-s390x Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-debuginfo-common-x86_64 Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-devel Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-devel-matched Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-doc Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-tools-debuginfo Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-zfcpdump-debuginfo Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-zfcpdump-devel Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-zfcpdump-devel-matched Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
perf Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
perf-debuginfo Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
python3-perf-debuginfo Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
rtla Red Hat:rhel_e4s:9.2::appstream | All versions | 0:5.14.0-284.187.1.el9_2 |
bpftool Red Hat:rhel_e4s:9.2::baseos | All versions | 0:7.0.0-284.187.1.el9_2 |
bpftool-debuginfo Red Hat:rhel_e4s:9.2::baseos | All versions | 0:7.0.0-284.187.1.el9_2 |
kernel Red Hat:rhel_e4s:9.2::baseos | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k Red Hat:rhel_e4s:9.2::baseos | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-core Red Hat:rhel_e4s:9.2::baseos | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-debug Red Hat:rhel_e4s:9.2::baseos | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-debug-core Red Hat:rhel_e4s:9.2::baseos | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-debug-debuginfo Red Hat:rhel_e4s:9.2::baseos | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-debug-modules Red Hat:rhel_e4s:9.2::baseos | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-debug-modules-core Red Hat:rhel_e4s:9.2::baseos | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-debug-modules-extra Red Hat:rhel_e4s:9.2::baseos | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-debuginfo Red Hat:rhel_e4s:9.2::baseos | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-modules Red Hat:rhel_e4s:9.2::baseos | All versions | 0:5.14.0-284.187.1.el9_2 |
kernel-64k-modules-core Red Hat:rhel_e4s:9.2::baseos | All versions | 0:5.14.0-284.187.1.el9_2 |
Products include Linux kernel.
How do I fix CVE-2026-53264?
Apply the vendor's patch.
Upgrade to the fixed version. These bugs are found with fuzzing and sanitisers and avoided by memory-safe languages. More about Use after free.
Is CVE-2026-53264 being exploited?
It is not confirmed as exploited in the wild, but public exploit code for CVE-2026-53264 exists.
Public exploit code: 2 proofs of concept on GitHub.
Other vulnerabilities in Linux kernel
Sources
Also known as AZL-90902, BELL-CVE-2026-53264, DEBIAN-CVE-2026-53264, GHSA-vq3g-6qwh-5wj2, RHSA-2026:54482, RHSA-2026:54515 and 6 more.