diff options
Diffstat (limited to 'net/ipv6/ah6.c')
| -rw-r--r-- | net/ipv6/ah6.c | 11 | 
1 files changed, 9 insertions, 2 deletions
diff --git a/net/ipv6/ah6.c b/net/ipv6/ah6.c index ecc35b93314..384233188ac 100644 --- a/net/ipv6/ah6.c +++ b/net/ipv6/ah6.c @@ -472,7 +472,10 @@ static void ah6_input_done(struct crypto_async_request *base, int err)  	skb->network_header += ah_hlen;  	memcpy(skb_network_header(skb), work_iph, hdr_len);  	__skb_pull(skb, ah_hlen + hdr_len); -	skb_set_transport_header(skb, -hdr_len); +	if (x->props.mode == XFRM_MODE_TUNNEL) +		skb_reset_transport_header(skb); +	else +		skb_set_transport_header(skb, -hdr_len);  out:  	kfree(AH_SKB_CB(skb)->tmp);  	xfrm_input_resume(skb, err); @@ -593,9 +596,13 @@ static int ah6_input(struct xfrm_state *x, struct sk_buff *skb)  	skb->network_header += ah_hlen;  	memcpy(skb_network_header(skb), work_iph, hdr_len); -	skb->transport_header = skb->network_header;  	__skb_pull(skb, ah_hlen + hdr_len); +	if (x->props.mode == XFRM_MODE_TUNNEL) +		skb_reset_transport_header(skb); +	else +		skb_set_transport_header(skb, -hdr_len); +  	err = nexthdr;  out_free:  |