On Sat, 2021-05-15 at 10:37 +0200, Pavel Machek wrote:
Hi!
From: Paolo Abeni pabeni@redhat.com
[ Upstream commit 78352f73dc5047f3f744764cc45912498c52f3c9 ]
Currently the UDP protocol delivers GSO_FRAGLIST packets to the sockets without the expected segmentation.
This change addresses the issue introducing and maintaining a couple of new fields to explicitly accept SKB_GSO_UDP_L4 or GSO_FRAGLIST packets. Additionally updates udp_unexpected_gso() accordingly.
UDP sockets enabling UDP_GRO stil keep accept_udp_fraglist zeroed.
What is going on here? accept_udp_fraglist variable is read-only.
Thank you for checking this!
The 'accept_udp_fraglist' field is implicitly initilized to zero at UDP socket allocation time (done by sk_alloc).
So this patch effectively force segmentation of SKB_GSO_FRAGLIST packets via the udp_unexpected_gso() helper.
We introduce the above field instead of unconditionally segmenting SKB_GSO_FRAGLIST, because the next patch will use it (to avoid unneeded segmentation for performance's sake for UDP tunnel), as you noted.
Please let me know if the above clarifies the situation.
Thanks!
Paolo