Description
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.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
74e6eb7fd27ef1ccc68041dbc66e6d80d2e4a1a0 to < aead84bdacd77e08357fd718e5dcaffaf387f3c3affected7d8dc1c7be8d3509e8f5164dd5df64c8e34d7eeb to < 79b713ef4261a8ead96af4703f89d0b5f25532e2affected7d8dc1c7be8d3509e8f5164dd5df64c8e34d7eeb to < 23901aa6b8a2f294c4b774436b4691f3ff863a8faffected7d8dc1c7be8d3509e8f5164dd5df64c8e34d7eeb to < b740e7ddd7ca0dbfeafca3f5e52717206cf28524affected7d8dc1c7be8d3509e8f5164dd5df64c8e34d7eeb to < 207b3ebacb6113acaaec0d171d5307032c690004affected6c4a0ba674f410ab99a30a16f32dac0ebfed5cd3affected6dcc8ba8a6074bb79040f502dc66ad23a58a1c86affected025b3326c5c409b372d0103ad30f174e55adbd1baffected6.6.48 to < 6.6.160affected5.15.166 to < 5.16affected6.1.107 to < 6.2affected6.10.7 to < 6.11affected
Linux Linux
Default version status: affected
6.11affected0 to < 6.11unaffected6.6.160 to ≤ 6.6.*unaffected6.12.75 to ≤ 6.12.*unaffected6.18.14 to ≤ 6.18.*unaffected6.19.4 to ≤ 6.19.*unaffected7.0 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/aead84bdacd77e08357fd718e5dcaffaf387f3c3 ↗
- https://git.kernel.org/stable/c/79b713ef4261a8ead96af4703f89d0b5f25532e2 ↗
- https://git.kernel.org/stable/c/23901aa6b8a2f294c4b774436b4691f3ff863a8f ↗
- https://git.kernel.org/stable/c/b740e7ddd7ca0dbfeafca3f5e52717206cf28524 ↗
- https://git.kernel.org/stable/c/207b3ebacb6113acaaec0d171d5307032c690004 ↗