Re: [PATCH net 2/2] bnxt_en: Pad short SW USO segments to BNXT_MIN_PKT_SIZE
From: Joe Damato
Date: Fri Oct 09 2026 - 16:23:40 EST
On Fri, Oct 09, 2026 at 01:07:59PM -0700, Michael Chan wrote:
> On Fri, Oct 9, 2026 at 12:45 PM Joe Damato <joe@xxxxxxx> wrote:
> >
> > On Fri, Oct 09, 2026 at 11:33:07AM -0700, Michael Chan wrote:
> > > Did you mean generic XDP turning around incoming packets with XDP_TX
> > > actions and transmitting them through the software stack? This path
> > > cannot generate USO packets, right?
> >
> > Hm, I'm probably missing something, but the case I'm describing is generic XDP
> > bouncing received packets back out with XDP_TX.
> >
> > I could be wrong (and if so I am happy to drop this if statement from the
> > code), but IIUC generic XDP runs from __netif_receive_skb_core() after
> > software GRO, so the packet it sees can be a GRO'd UDP packet with
> > SKB_GSO_UDP_L4 set (because maybe the socket had UDP_GRO set?).
> >
> > The generic XDP path seems to keep all of the gso fields. Later generic
> > XDP TX calls netdev_start_xmit without validate_xmit_skb being called
> > and so gso_size could potentially be some tiny value.
>
> I don't know. You may be right, but this is a highly unusual code
> path. Other features checked in bnxt_features_check() do not get
> rechecked again.
>
> If you decide to keep the check, please add a comment. Thanks.
OK, I'll submit a v2 with the following comment. Let me know if this OK
with you before I respin:
/* bnxt_features_check() makes the stack segment these, but paths
* that skip validate_xmit_skb() (e.g. generic XDP_TX of a GRO'd
* skb) can still get here. Padding every segment would need more
* BDs than bds_needed reserves below, so drop instead.
*/
if (unlikely(bnxt_sw_gso_pad_len(hdr_len, mss)))
goto drop;
Also, since I haven't seen this issue in production myself and according
to my math it is not possible to hit this with QUIC on ipv4, Jakub asked
me to submit this to net-next instead of net.