CVE-2026-23016

Source
https://cve.org/CVERecord?id=CVE-2026-23016
Import Source
https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-23016.json
JSON Data
https://api.osv.dev/v1/vulns/CVE-2026-23016
Downstream
Published
2026-01-31T11:38:59.578Z
Modified
2026-02-09T19:33:17.356005Z
Summary
inet: frags: drop fraglist conntrack references
Details

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

inet: frags: drop fraglist conntrack references

Jakub added a warning in nfconntrackcleanupnetlist() to make debugging leaked skbs/conntrack references more obvious.

syzbot reports this as triggering, and I can also reproduce this via ip_defrag.sh selftest:

conntrack cleanup blocked for 60s WARNING: net/netfilter/nfconntrackcore.c:2512 [..]

conntrack clenups gets stuck because there are skbs with still hold nfconn references via their fraglist.

net.core.skbdefermax=0 makes the hang disappear.

Eric Dumazet points out that skbreleasehead_state() doesn't follow the fraglist.

ipdefrag.sh can only reproduce this problem since commit 6471658dc66c ("udp: use skbattemptdeferfree()"), but AFAICS this problem could happen with TCP as well if pmtu discovery is off.

The relevant problem path for udp is: 1. netns emits fragmented packets 2. nfdefragv6hook reassembles them (in output hook) 3. reassembled skb is tracked (skb owns nfconn reference) 4. ip6output refragments 5. refragmented packets also own nfconn reference (ip6fragment calls ip6copymetadata()) 6. on input path, nfdefragv6hook skips defragmentation: the fragments already have skb->nfconn attached 7. skbs are reassembled via ipv6fragrcv() 8. skbconsumeudp -> skbattemptdeferfree() -> skb ends up in pcpu freelist, but still has nf_conn reference.

Possible solutions: 1 let defrag engine drop nfconn entry, OR 2 export kickdeferlistpurge() and call it from the conntrack netns exit callback, OR 3 add skbhasfraglist() check to skbattemptdeferfree()

2 & 3 also solve ip_defrag.sh hang but share same drawback:

Such reassembled skbs, queued to socket, can prevent conntrack module removal until userspace has consumed the packet. While both tcp and udp stack do call nfresetct() before placing skb on socket queue, that function doesn't iterate frag_list skbs.

Therefore drop nfconn entries when they are placed in defrag queue. Keep the nfconn entry of the first (offset 0) skb so that reassembled skb retains nf_conn entry for sake of TX path.

Note that fixes tag is incorrect; it points to the commit introducing the 'ip_defrag.sh reproducible problem': no need to backport this patch to every stable kernel.

Database specific
{
    "cna_assigner": "Linux",
    "osv_generated_from": "https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/23xxx/CVE-2026-23016.json"
}
References

Affected packages

Git / git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git

Affected ranges

Type
GIT
Repo
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
Events
Introduced
6471658dc66c670580a7616e75f51b52917e7883
Fixed
088ca99dbb039c444c3ff987c5412a73f4f0cbf8
Fixed
2ef02ac38d3c17f34a00c4b267d961a8d4b45d1a

Affected versions

v6.*
v6.17
v6.17-rc6
v6.17-rc7
v6.18
v6.18-rc1
v6.18-rc2
v6.18-rc3
v6.18-rc4
v6.18-rc5
v6.18-rc6
v6.18-rc7
v6.18.1
v6.18.2
v6.18.3
v6.18.4
v6.18.5
v6.19-rc1
v6.19-rc2
v6.19-rc3

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-23016.json"

Linux / Kernel

Package

Name
Kernel

Affected ranges

Type
ECOSYSTEM
Events
Introduced
6.18.0
Fixed
6.18.6

Database specific

source
"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-23016.json"