ip6_tunnel: Update skb->protocol to ETH_P_IPV6 in ip6_tnl_xmit()
authorEli Cooper <elicooper@gmx.com>
Wed, 26 Oct 2016 02:11:09 +0000 (10:11 +0800)
committerDavid S. Miller <davem@davemloft.net>
Sat, 29 Oct 2016 18:49:31 +0000 (14:49 -0400)
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>
net/ipv6/ip6_tunnel.c

index 5692d6b8da95a7e4cc52af8fb39f5f2f854910bd..87784560dc46bceaf184f811222f312383f11e04 100644 (file)
@@ -1172,6 +1172,7 @@ route_lookup:
        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);