CVE-2026-45859: netfilter: nfnetlink_queue: do shared-unconfirmed check before segmentation
In the Linux kernel, the following vulnerability has been resolved:
netfilter: nfnetlinkqueue: do shared-unconfirmed check before segmentation
Ulrich reports a regression with nfqueue:
If an application did not set the 'FGSO' capability flag and a gso packet with an unconfirmed nfconn entry is received all packets are now dropped instead of queued, because the check happens after skbgsosegment(). In that case, we did have exclusive ownership of the skb and its associated conntrack entry. The elevated use count is due to skbclone happening via skbgsosegment().
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 nfctdropunconfirmed(): 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.
Affected Software
Event History
Frequently Asked Questions
Which deployments are exposed to the packet-drop condition?
Deployments using nfnetlink_queue/NFQUEUE are affected when the userspace application has not set the F_GSO capability flag and receives a GSO packet associated with an unconfirmed conntrack entry.
What traffic is implicated by this issue?
The condition occurs with UDP traffic. TCP is not expected to trigger it because the only unconfirmed TCP packet is the SYN, which is not aggregated.
How can an operator recognize the affected behavior?
An affected setup may drop all segments of a received GSO packet rather than queueing them when the NFQUEUE application does not advertise F_GSO support. The issue is tied to unconfirmed conntrack entries and segmentation of the packet.