CVE-2026-46319: net/sched: act_ct: Only release RCU read lock after ct_ft

Published Jun 9, 2026
·
Updated

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

net/sched: actct: Only release RCU read lock after ctft

When looking up a flow table in actct in tcfctflowtableget(), rhashtablelookupfast() internally opens and closes an RCU read critical section before returning ctft. The tcfctflowtablecleanupwork() can complete before refcountincnotzero() is invoked on the returned ctft resulting in a UAF on the already freed ctft object. This vulnerability can lead to privilege escalation.

Analysis from zdi-disclosures@trendmicro.com: When initializing actct, tcfctinit() is called, which internally triggers tcfctflowtableget().

static int tcfctflowtableget(struct net net, struct tcfctparams params)

{ struct zoneshtkey key = { .net = net, .zone = params->zone }; struct tcfctflowtable ctft; int err = -ENOMEM;

mutexlock(&zonesmutex); ctft = rhashtablelookupfast(&zonesht, &key, zonesparams); // [1] if (ctft && refcountincnotzero(&ctft->ref)) // [2] goto outunlock; ... }

static alwaysinline void rhashtablelookupfast( struct rhashtable ht, const void key, const struct rhashtableparams params) { void obj;

rcureadlock(); obj = rhashtablelookup(ht, key, params); rcureadunlock();

return obj; }

At [1], rhashtablelookupfast() looks up and returns the corresponding ctft from zonesht . The lookup is performed within an RCU read critical section through rcureadlock() / rcureadunlock(), which prevents the object from being freed. However, at the point of function return, rcureadunlock() has already been called, and there is nothing preventing ctft from being freed before reaching refcountincnotzero(&ctft->ref) at [2]. This interval becomes the race window, during which ctft can be freed.

Free Process:

tcfctflowtableput() is executed through the path tcfctcleanup() callrcu() tcfctparamsfreercu() tcfctparamsfree() tcfctflowtableput().

static void tcfctflowtableput(struct tcfctflowtable ctft) { if (refcountdecandtest(&ctft->ref)) { rhashtableremovefast(&zonesht, &ctft->node, zonesparams); INITRCUWORK(&ctft->rwork, tcfctflowtablecleanupwork); // [3] queuercuwork(actctwq, &ctft->rwork); } }

At [3], tcfctflowtablecleanupwork() is scheduled as RCU work

static void tcfctflowtablecleanupwork(struct workstruct work)

{ struct tcfctflowtable ctft; struct flowblock block;

ctft = containerof(torcuwork(work), struct tcfctflowtable, rwork); nfflowtablefree(&ctft->nfft); block = &ctft->nfft.flowblock; downwrite(&ctft->nfft.flowblocklock); WARNON(!listempty(&block->cblist)); upwrite(&ctft->nfft.flowblocklock); kfree(ctft); // [4]

moduleput(THISMODULE); }

tcfctflowtablecleanupwork() frees ctft at [4]. When this function executes between [1] and [2], UAF occurs.

This race condition has a very short race window, making it generally difficult to trigger. Therefore, to trigger the vulnerability an msleep(100) was inserted after[1]

Affected Software

10 affected componentsFixes available
Linux Linux kernel
Microsoft azl3 kernel 6.6.139.1-1<6.6.141.1-1
6.6.141.1-1
Linux Linux kernel>=5.7<5.10.258
Linux Linux kernel>=5.11<5.15.209
Linux Linux kernel>=5.16<6.1.175
Linux Linux kernel>=6.2<6.6.141
Linux Linux kernel>=6.7<6.12.91
Linux Linux kernel>=6.13<6.18.33
Linux Linux kernel>=6.19<7.0.10
debian/linux
6.1.176-16.1.190-16.12.107-16.12.115-27.2.12-17.2.15-1

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Upgrade

    Upgrade to a fixed release to a version that resolves this vulnerability.

    Fixed in 6.6.141.1-1
  2. Upgrade

    Upgrade debian/linux to a version that resolves this vulnerability.

    Fixed in 6.1.176-1Fixed in 6.1.190-1Fixed in 6.12.107-1Fixed in 6.12.113-1Fixed in 7.2.12-1Fixed in 7.2.14-1

Event History

Jun 9, 2026
CVE Published
via MITRE·12:11 PM
Data Sourced
via MITRE·12:11 PM
DescriptionSeverity
Data Sourced
via NVD·01:16 PM
RemedyDescriptionSeverityWeaknessAffected Software
Jun 10, 2026
Data Sourced
via Microsoft·08:05 AM
DescriptionSeverityWeaknessAffected Software

Parent advisories

This vulnerability appears in the following advisories.

Peer vulnerabilities

Found alongside the following vulnerabilities.

Frequently Asked Questions

1

What is the severity of CVE-2026-46319?

CVE-2026-46319 has a risk severity rating of 43.

2

How do I fix CVE-2026-46319?

To fix CVE-2026-46319, update your Linux kernel to the latest version that addresses this vulnerability.

3

What type of vulnerability is CVE-2026-46319?

CVE-2026-46319 is categorized as a race condition vulnerability.

4

What components are affected by CVE-2026-46319?

CVE-2026-46319 affects the net/sched module of the Linux kernel.

5

When was CVE-2026-46319 published?

CVE-2026-46319 was published on June 9, 2026.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203