summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEli Cooper <elicooper@gmx.com>2016-10-26 10:11:09 +0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2016-11-15 07:48:53 +0100
commita6289d9ac3fe6f3b1aaacbbbddff2ed2a9d9965a (patch)
treef068c87af3bab0d4504e97192df6fb04db9c1bb9
parentc9e086b9009a1cf189dd96abad95285bc9627624 (diff)
downloadlwn-a6289d9ac3fe6f3b1aaacbbbddff2ed2a9d9965a.tar.gz
lwn-a6289d9ac3fe6f3b1aaacbbbddff2ed2a9d9965a.zip
ip6_tunnel: Update skb->protocol to ETH_P_IPV6 in ip6_tnl_xmit()
[ Upstream commit ae148b085876fa771d9ef2c05f85d4b4bf09ce0d ] This patch updates skb->protocol to ETH_P_IPV6 in ip6_tnl_xmit() when an IPv6 header is installed to a socket buffer. This is not a cosmetic change. Without updating this value, GSO packets transmitted through an ipip6 tunnel have the protocol of ETH_P_IP and skb_mac_gso_segment() will attempt to call gso_segment() for IPv4, which results in the packets being dropped. Fixes: b8921ca83eed ("ip4ip6: Support for GSO/GRO") Signed-off-by: Eli Cooper <elicooper@gmx.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--net/ipv6/ip6_tunnel.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/net/ipv6/ip6_tunnel.c b/net/ipv6/ip6_tunnel.c
index 41a647955b15..41489f39c456 100644
--- a/net/ipv6/ip6_tunnel.c
+++ b/net/ipv6/ip6_tunnel.c
@@ -1134,6 +1134,7 @@ int ip6_tnl_xmit(struct sk_buff *skb, struct net_device *dev, __u8 dsfield,
if (err)
return err;
+ skb->protocol = htons(ETH_P_IPV6);
skb_push(skb, sizeof(struct ipv6hdr));
skb_reset_network_header(skb);
ipv6h = ipv6_hdr(skb);