KernelScan.io

HIGH

netfilter NfQueue Race

CVE-2026-45859

CVSS 7.5 / 10.0 NVD

CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

KernelScan AI5.5MEDIUM

01

In the Linux kernel, the following vulnerability has been resolved: netfilter: nfnetlink_queue: do shared-unconfirmed check before segmentation Ulrich reports a regression with nfqueue: If an application did not set the 'F_GSO' capability flag and a gso packet with an unconfirmed nf_conn entry is received all packets are now dropped instead of queued, because the check happens after skb_gso_segment(). In that case, we did have exclusive ownership of the skb and its associated conntrack entry. The elevated use count is due to skb_clone happening via skb_gso_segment(). Move the check so that its peformed vs. the aggregated packet. Then, annotate the individual segments except the first one so we can do a 2nd check at reinject time. For the normal case, where userspace does in-order reinjects, this avoids packet drops: first reinjected segment continues traversal and confirms entry, remaining segments observe the confirmed entry. While at it, simplify nf_ct_drop_unconfirmed(): We only care about unconfirmed entries with a refcnt > 1, there is no need to special-case dying entries. This only happens with UDP. With TCP, the only unconfirmed packet will be the TCP SYN, those aren't aggregated by GRO. Next patch adds a udpgro test case to cover this scenario.

02

Engine v0.2.0

Risk summary

Applications using netfilter nfqueue without GSO capability flag experience packet drops when processing UDP GSO packets with unconfirmed connection tracking entries. This causes denial of service for network traffic processing applications that rely on nfqueue for packet inspection or modification.

Affectednet/netfilter/nfnetlink_queue.c (netfilter)

Vulnerability analysis

The vulnerability is a race condition in netfilter's nfqueue implementation. When GSO (Generic Segmentation Offload) packets with unconfirmed connection tracking entries are processed, the shared-unconfirmed check was performed after skb_gso_segment(), which creates clones and elevates the conntrack reference count. This caused legitimate packets to be incorrectly identified as having shared unconfirmed conntracks and dropped. The fix moves the check before segmentation and adds proper annotation for segments to handle reinject scenarios correctly. The attack surface is local, requiring applications that use nfqueue functionality.

03

BranchFixed inPatch commit
5.165.1679b713ef4261
6.116.11207b3ebacb61
6.126.12.75
6.186.18.14
6.196.19.4
6.26.223901aa6b8a2
6.76.7b740e7ddd7ca
mainline7.0