diff options
author | Alexander Duyck <aduyck@mirantis.com> | 2016-05-02 09:25:16 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2016-05-03 16:00:54 -0400 |
commit | af67eb9e7e1ab37880459f83153d34b3c42b0075 (patch) | |
tree | 07ad6618b99e127871db7b4c77c586730cd18fcb /include/net/vxlan.h | |
parent | 996e802187889f1cd412e6929c9344b92ccb78c4 (diff) | |
download | linux-af67eb9e7e1ab37880459f83153d34b3c42b0075.tar.gz linux-af67eb9e7e1ab37880459f83153d34b3c42b0075.tar.bz2 linux-af67eb9e7e1ab37880459f83153d34b3c42b0075.zip |
vxlan: Add checksum check to the features check function
We need to perform an additional check on the inner headers to determine if
we can offload the checksum for them. Previously this check didn't occur
so we would generate an invalid frame in the case of an IPv6 header
encapsulated inside of an IPv4 tunnel. To fix this I added a secondary
check to vxlan_features_check so that we can verify that we can offload the
inner checksum.
Signed-off-by: Alexander Duyck <aduyck@mirantis.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/vxlan.h')
-rw-r--r-- | include/net/vxlan.h | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/include/net/vxlan.h b/include/net/vxlan.h index 73ed2e951c02..35437c779da8 100644 --- a/include/net/vxlan.h +++ b/include/net/vxlan.h @@ -252,7 +252,9 @@ static inline netdev_features_t vxlan_features_check(struct sk_buff *skb, (skb->inner_protocol_type != ENCAP_TYPE_ETHER || skb->inner_protocol != htons(ETH_P_TEB) || (skb_inner_mac_header(skb) - skb_transport_header(skb) != - sizeof(struct udphdr) + sizeof(struct vxlanhdr)))) + sizeof(struct udphdr) + sizeof(struct vxlanhdr)) || + (skb->ip_summed != CHECKSUM_NONE && + !can_checksum_protocol(features, inner_eth_hdr(skb)->h_proto)))) return features & ~(NETIF_F_CSUM_MASK | NETIF_F_GSO_MASK); return features; |