aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/net/ipv4/udp_offload.c
diff options
context:
space:
mode:
authorSean Tranchetti <stranche@codeaurora.org>2018-04-30 18:01:02 -0600
committerDavid S. Miller <davem@davemloft.net>2018-05-02 10:59:32 -0400
commit6c035ba7e73aba4536a1112f9a0901ab40aab460 (patch)
tree41eca4ee86b60fddaf011f56648e01bf7fcb245a /net/ipv4/udp_offload.c
parentselftest: add test for TCP_INQ (diff)
downloadwireguard-linux-6c035ba7e73aba4536a1112f9a0901ab40aab460.tar.xz
wireguard-linux-6c035ba7e73aba4536a1112f9a0901ab40aab460.zip
udp: Complement partial checksum for GSO packet
Using the udp_v4_check() function to calculate the pseudo header for the newly segmented UDP packets results in assigning the complement of the value to the UDP header checksum field. Always undo the complement the partial checksum value in order to match the case where GSO is not used on the UDP transmit path. Fixes: ee80d1ebe5ba ("udp: add udp gso") Signed-off-by: Sean Tranchetti <stranche@codeaurora.org> Signed-off-by: Subash Abhinov Kasiviswanathan <subashab@codeaurora.org> Acked-by: Willem de Bruijn <willemb@google.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/ipv4/udp_offload.c')
-rw-r--r--net/ipv4/udp_offload.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/net/ipv4/udp_offload.c b/net/ipv4/udp_offload.c
index f78fb3673472..006257092f06 100644
--- a/net/ipv4/udp_offload.c
+++ b/net/ipv4/udp_offload.c
@@ -223,6 +223,7 @@ struct sk_buff *__udp_gso_segment(struct sk_buff *gso_skb,
csum_replace2(&uh->check, htons(mss),
htons(seg->len - hdrlen - sizeof(*uh)));
+ uh->check = ~uh->check;
seg->destructor = sock_wfree;
seg->sk = sk;
sum_truesize += seg->truesize;