Subject: Re: [PATCH] ip6_gre: simplify gre header parsing in ip6gre_err

From: Jiri Benc <[email-masked]>
Date: Mon, 10 Sep 2018 17:36:40 +0200

On Mon, 10 Sep 2018 16:25:09 +0800, Haishuang Yan wrote:
> +	if (gre_parse_header(skb, &tpi, &csum_err, htons(ETH_P_IPV6),
> +			     offset) < 0) {
> +		if (!csum_err)		/* ignore csum errors. */
> +			return;
>  	}

gre_parse_header stops parsing when csum_err is encountered. Which
means tpi.key is undefined...

>  
> -	if (!pskb_may_pull(skb, offset + grehlen))
> -		return;
>  	ipv6h = (const struct ipv6hdr *)skb->data;
> -	greh = (const struct gre_base_hdr *)(skb->data + offset);
> -	key = key_off ? *(__be32 *)(skb->data + key_off) : 0;
> -
>  	t = ip6gre_tunnel_lookup(skb->dev, &ipv6h->daddr, &ipv6h->saddr,
> -				 key, greh->protocol);
> +				 tpi.key, tpi.proto);

...and can't be used here.

 Jiri