Re: [PATCH net-next v2 1/3] net: gso: do not include jumbogram HBH header in seglen calculation
From: Paolo Abeni <pabeni@redhat.com>
Date: 2026-01-13 14:14:32
On 1/6/26 10:52 AM, Mariusz Klimek wrote:
quoted hunk ↗ jump to hunk
@@ -177,8 +178,13 @@ static unsigned int skb_gso_transport_seglen(const struct sk_buff *skb) */ static unsigned int skb_gso_network_seglen(const struct sk_buff *skb) { - unsigned int hdr_len = skb_transport_header(skb) - - skb_network_header(skb); + unsigned int off = skb_network_offset(skb) + sizeof(struct ipv6hdr); + unsigned int hdr_len = skb_network_header_len(skb); + + /* Jumbogram HBH header is removed upon segmentation. */ + if (skb_protocol(skb, true) == htons(ETH_P_IPV6) && + skb->len - off > IPV6_MAXPLEN) + hdr_len -= sizeof(struct hop_jumbo_hdr);
I'm sorry for splitting the feedback in multiple replies. I think the concern I expressed on v1: https://lore.kernel.org/netdev/a7b90a3a-79ed-42a4-a782-17cde1b9a2d6@redhat.com/ (local) is still not addressed here. What I fear is: - TCP cooks a plain GSO packet just below the 64K limit. - Such packet goes trough UDP (or gre) encapsulation, the skb->len size (including outer network header) grows above the 64K limit. - the above check is satisfied, but no jumbo hop option is present. I think you could use the `ipv6_has_hopopt_jumbo()` helper to be on the safe side. /P