CVE-2026-97609: netfilter: cttimeout: prevent UAF during module unload

Published Sep 25, 2026
·
Updated

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

netfilter: cttimeout: prevent UAF during module unload

nfctsettimeout() protects the timeout hook dereference and policy lookup with rcureadlock(). cttimeoutexit(), however, unregisters the per-net operations before it clears the hook.

This allows the following interleaving:

CPU 0 CPU 1 cttimeoutexit() nfctsettimeout() unregisterpernetsubsys() rcureadlock() kfree(pernet) h = nfcttimeouthook h->timeoutfindget() nfcttimeoutpernet()

The hook still points to ctnltimeoutfindget() when CPU 1 looks up the already freed per-net timeout list. KASAN reported:

BUG: KASAN: slab-use-after-free in ctnltimeoutfindget Read of size 8 by task poc/90 Call Trace: ctnltimeoutfindget+0x271/0x2a0 [nfnetlinkcttimeout] nfctsettimeout+0x7b/0x3c0 xtcttgcheck+0x724/0xb20 xtchecktarget+0x234/0xa90 doiptsetctl+0x570/0x1270 Allocated by task 89: kmallocnoprof+0x16e/0x460 opsinit+0x6d/0x420 registerpernetoperations+0x2f6/0x670 Freed by task 91: kfree+0x131/0x390 opsundolist+0x3d4/0x730 unregisterpernetoperations+0x232/0x490 unregisterpernetsubsys+0x1c/0x30 cttimeoutexit+0x52/0x970 [nfnetlinkcttimeout]

Clear the hook and wait for existing readers before unregistering the per-net operations. This blocks new policy lookups and ensures readers that observed the hook finish before the per-net storage is freed.

Affected Software

1 affected component
Linux Linux kernel

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Compensating control

    In the cttimeout module unload path, clear the timeout hook before unregistering per-net operations, protect the timeout-hook dereference and policy lookup with rcu_read_lock(), and wait for existing readers to finish before freeing per-net timeout storage.

Event History

Sep 25, 2026
CVE Published
via MITRE·10:22 AM
Data Sourced
via MITRE·10:22 AM
Description

Frequently Asked Questions

1

What conditions are required to trigger the use-after-free?

The race requires cttimeout module exit to unregister per-network operations and free the per-net timeout list while another CPU executes nf_ct_set_timeout(). In the reported path, the concurrent operation reaches nf_ct_set_timeout() through xt_ct_tg_check() during an iptables control operation.

2

What component is involved in the vulnerable lookup?

The stale hook can still point to ctnl_timeout_find_get() from the nfnetlink_cttimeout module after the per-net timeout data has been freed. The resulting access occurs when that function looks up the freed per-net timeout list.

3

How might this issue appear during testing or incident analysis?

KASAN can report a slab-use-after-free in ctnl_timeout_find_get(), with nf_ct_set_timeout(), xt_ct_tg_check(), xt_check_target(), and do_ipt_set_ctl() in the call trace. The report identifies an 8-byte read from freed memory.

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