Re: [PATCH 5.10 380/530] udp: never accept GSO_FRAGLIST packets

From: Paolo Abeni
Date: Mon May 17 2021 - 02:52:41 EST


On Sat, 2021-05-15 at 10:37 +0200, Pavel Machek wrote:
> Hi!
>
> > From: Paolo Abeni <pabeni@xxxxxxxxxx>
> >
> > [ 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