summaryrefslogtreecommitdiffstats
path: root/net/ipv6/tcpv6_offload.c
diff options
context:
space:
mode:
authorJonathan Cameron <Jonathan.Cameron@huawei.com>2024-10-12 12:22:25 +0200
committerJonathan Cameron <Jonathan.Cameron@huawei.com>2024-10-12 12:43:29 +0200
commit220c71dafaa28cbb75fd785670cf68a758347026 (patch)
tree47a974cd3ea71ba59116037b56a509c41a430b63 /net/ipv6/tcpv6_offload.c
parentiio: Switch back to struct platform_driver::remove() (diff)
parentLinux 6.12-rc2 (diff)
downloadlinux-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.c10
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);