diff options
Diffstat (limited to 'net/core/dev.c')
| -rw-r--r-- | net/core/dev.c | 4 | 
1 files changed, 4 insertions, 0 deletions
| diff --git a/net/core/dev.c b/net/core/dev.c index ea5fbcd133ae..8453e14d301b 100644 --- a/net/core/dev.c +++ b/net/core/dev.c @@ -3639,6 +3639,9 @@ int skb_csum_hwoffload_help(struct sk_buff *skb,  		return 0;  	if (features & (NETIF_F_IP_CSUM | NETIF_F_IPV6_CSUM)) { +		if (vlan_get_protocol(skb) == htons(ETH_P_IPV6) && +		    skb_network_header_len(skb) != sizeof(struct ipv6hdr)) +			goto sw_checksum;  		switch (skb->csum_offset) {  		case offsetof(struct tcphdr, check):  		case offsetof(struct udphdr, check): @@ -3646,6 +3649,7 @@ int skb_csum_hwoffload_help(struct sk_buff *skb,  		}  	} +sw_checksum:  	return skb_checksum_help(skb);  }  EXPORT_SYMBOL(skb_csum_hwoffload_help); | 
