diff options
author | Jonathan Cameron <Jonathan.Cameron@huawei.com> | 2024-10-12 12:22:25 +0200 |
---|---|---|
committer | Jonathan Cameron <Jonathan.Cameron@huawei.com> | 2024-10-12 12:43:29 +0200 |
commit | 220c71dafaa28cbb75fd785670cf68a758347026 (patch) | |
tree | 47a974cd3ea71ba59116037b56a509c41a430b63 /net/ipv6/tcpv6_offload.c | |
parent | iio: Switch back to struct platform_driver::remove() (diff) | |
parent | Linux 6.12-rc2 (diff) | |
download | linux-220c71dafaa28cbb75fd785670cf68a758347026.tar.xz linux-220c71dafaa28cbb75fd785670cf68a758347026.zip |
Merge tag 'v6.12-rc2' into test2
Linux 6.12-rc2
Resolved movement of asm/unaligned.h to linux/unaligned.h
Diffstat (limited to 'net/ipv6/tcpv6_offload.c')
-rw-r--r-- | net/ipv6/tcpv6_offload.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/net/ipv6/tcpv6_offload.c b/net/ipv6/tcpv6_offload.c index 23971903e66d..a45bf17cb2a1 100644 --- a/net/ipv6/tcpv6_offload.c +++ b/net/ipv6/tcpv6_offload.c @@ -159,8 +159,14 @@ static struct sk_buff *tcp6_gso_segment(struct sk_buff *skb, if (!pskb_may_pull(skb, sizeof(*th))) return ERR_PTR(-EINVAL); - if (skb_shinfo(skb)->gso_type & SKB_GSO_FRAGLIST) - return __tcp6_gso_segment_list(skb, features); + if (skb_shinfo(skb)->gso_type & SKB_GSO_FRAGLIST) { + struct tcphdr *th = tcp_hdr(skb); + + if (skb_pagelen(skb) - th->doff * 4 == skb_shinfo(skb)->gso_size) + return __tcp6_gso_segment_list(skb, features); + + skb->ip_summed = CHECKSUM_NONE; + } if (unlikely(skb->ip_summed != CHECKSUM_PARTIAL)) { const struct ipv6hdr *ipv6h = ipv6_hdr(skb); |