diff options
Diffstat (limited to 'net/ipv6/ip6_gre.c')
| -rw-r--r-- | net/ipv6/ip6_gre.c | 11 | 
1 files changed, 7 insertions, 4 deletions
| diff --git a/net/ipv6/ip6_gre.c b/net/ipv6/ip6_gre.c index c8cf2fdbb13b..18a3794b0f52 100644 --- a/net/ipv6/ip6_gre.c +++ b/net/ipv6/ip6_gre.c @@ -927,7 +927,6 @@ tx_err:  static netdev_tx_t ip6erspan_tunnel_xmit(struct sk_buff *skb,  					 struct net_device *dev)  { -	struct ipv6hdr *ipv6h = ipv6_hdr(skb);  	struct ip6_tnl *t = netdev_priv(dev);  	struct dst_entry *dst = skb_dst(skb);  	struct net_device_stats *stats; @@ -990,6 +989,8 @@ static netdev_tx_t ip6erspan_tunnel_xmit(struct sk_buff *skb,  		fl6.flowi6_uid = sock_net_uid(dev_net(dev), NULL);  		dsfield = key->tos; +		if (!(tun_info->key.tun_flags & TUNNEL_ERSPAN_OPT)) +			goto tx_err;  		md = ip_tunnel_info_opts(tun_info);  		if (!md)  			goto tx_err; @@ -1010,6 +1011,8 @@ static netdev_tx_t ip6erspan_tunnel_xmit(struct sk_buff *skb,  			goto tx_err;  		}  	} else { +		struct ipv6hdr *ipv6h = ipv6_hdr(skb); +  		switch (skb->protocol) {  		case htons(ETH_P_IP):  			memset(&(IPCB(skb)->opt), 0, sizeof(IPCB(skb)->opt)); @@ -1126,7 +1129,7 @@ static void ip6gre_tnl_link_config_route(struct ip6_tnl *t, int set_mtu,  			return;  		if (rt->dst.dev) { -			dev->hard_header_len = rt->dst.dev->hard_header_len + +			dev->needed_headroom = rt->dst.dev->hard_header_len +  					       t_hlen;  			if (set_mtu) { @@ -1152,7 +1155,7 @@ static int ip6gre_calc_hlen(struct ip6_tnl *tunnel)  	tunnel->hlen = tunnel->tun_hlen + tunnel->encap_hlen;  	t_hlen = tunnel->hlen + sizeof(struct ipv6hdr); -	tunnel->dev->hard_header_len = LL_MAX_HEADER + t_hlen; +	tunnel->dev->needed_headroom = LL_MAX_HEADER + t_hlen;  	return t_hlen;  } @@ -1822,7 +1825,7 @@ static int ip6erspan_calc_hlen(struct ip6_tnl *tunnel)  		       erspan_hdr_len(tunnel->parms.erspan_ver);  	t_hlen = tunnel->hlen + sizeof(struct ipv6hdr); -	tunnel->dev->hard_header_len = LL_MAX_HEADER + t_hlen; +	tunnel->dev->needed_headroom = LL_MAX_HEADER + t_hlen;  	return t_hlen;  } |