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

Linux Linux Kernel Use-After-Free Rated 7.8 CVSS

Last refreshed2026-10-15

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

Key Details

CVECVE-2026-53264
CVSS Score / Version
7.8 (High) / CVSS v3.1
Updated2026-10-15
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 and Siemens SIMATIC S7-1500 TM MFP - GNU/Linux subsystem
Classified as
CWE-416 (Use After Free)
Exploitation prediction (EPSS)
0.25% probability of exploitation in the next 30 days (15% percentile) -- FIRST.org's EPSS model.

Affected Products, Subsystems & Sectors

VendorProductAffected VersionsPatch Status
LinuxLinux Kernel
SiemensSIMATIC S7-1500 TM MFP - GNU/Linux subsystem
SubsystemsControllers & Field I/O, OT Supporting Infrastructure
SectorsAll Sectors

What to Know

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. (NVD)

What to Do

Monitor Linux's and Siemens's web pages for any future patch releases.

References

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