On Tue, Oct 27, 2026 at 02:56:07PM +0200, Magnus Karlsson wrote:
> On Tue, 27 Oct 2026 at 14:43, Eric Dumazet <[email protected]> wrote:
> >
> > Le mar. 27 oct. 2026 à 13:15, Magnus Karlsson
> > <[email protected]> a écrit :
> > >
> > > That USO works for 64-bit systems is just pure luck. Currently, the
> > > computation of the UDP segmentation header is performed using sizeof()
> > > a pointer instead of the sizeof() the UDP header that the pointer
> > > points to. Since the UDP header happens to be 8 bytes long and a
> > > pointer is 8 bytes long on a 64-bit system, this works on all those
> > > systems. But no such luck for anyone using a 32-bit system as 8 bytes
> > > != 4 bytes. So fix this by using sizeof() the UDP header that the
> > > pointer points to instead.
> > >
> > > This was found by an LLM while implementing something else that used USO.
> > >
> > > Fixes: c91a4f9feb67a199c2 ("add support for UDP Segmentation Offload")
> >
> > Missing prefix? This was really:
> >
> > Fixes: c91a4f9feb67 ("iavf: add support for UDP Segmentation Offload")
> 
> You are correct on both accounts/patches. Do not know why I missed this, 
> sorry.
> 
> Do you want a v2 with this added?

Current policy is that you need to wait 24h with posting next revisions.
Eric marked it as 'changes requested' so yes, you need a v2.

You can add my review tag as well, thanks for auditing intel drivers
against this bug.

MF

> 
> > Other than this,
> > Reviewed-by: Eric Dumazet <[email protected]>
> >
> > > Signed-off-by: Magnus Karlsson <[email protected]>
> > > ---
> > >  drivers/net/ethernet/intel/iavf/iavf_txrx.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/net/ethernet/intel/iavf/iavf_txrx.c 
> > > b/drivers/net/ethernet/intel/iavf/iavf_txrx.c
> > > index 8982cf75466f..2c290d7788d2 100644
> > > --- a/drivers/net/ethernet/intel/iavf/iavf_txrx.c
> > > +++ b/drivers/net/ethernet/intel/iavf/iavf_txrx.c
> > > @@ -1807,7 +1807,7 @@ static int iavf_tso(struct iavf_tx_buffer *first, 
> > > u8 *hdr_len,
> > >                 csum_replace_by_diff(&l4.udp->check,
> > >                                      (__force __wsum)htonl(paylen));
> > >                 /* compute length of UDP segmentation header */
> > > -               *hdr_len = (u8)sizeof(l4.udp) + l4_offset;
> > > +               *hdr_len = sizeof(*l4.udp) + l4_offset;
> > >         } else {
> > >                 csum_replace_by_diff(&l4.tcp->check,
> > >                                      (__force __wsum)htonl(paylen));
> > > --
> > > 2.38.1
> > >

Reply via email to