|
@@ -269,7 +269,11 @@ static void ah_input_done(struct crypto_async_request *base, int err)
|
|
|
skb->network_header += ah_hlen;
|
|
|
memcpy(skb_network_header(skb), work_iph, ihl);
|
|
|
__skb_pull(skb, ah_hlen + ihl);
|
|
|
- skb_set_transport_header(skb, -ihl);
|
|
|
+
|
|
|
+ if (x->props.mode == XFRM_MODE_TUNNEL)
|
|
|
+ skb_reset_transport_header(skb);
|
|
|
+ else
|
|
|
+ skb_set_transport_header(skb, -ihl);
|
|
|
out:
|
|
|
kfree(AH_SKB_CB(skb)->tmp);
|
|
|
xfrm_input_resume(skb, err);
|
|
@@ -381,7 +385,10 @@ static int ah_input(struct xfrm_state *x, struct sk_buff *skb)
|
|
|
skb->network_header += ah_hlen;
|
|
|
memcpy(skb_network_header(skb), work_iph, ihl);
|
|
|
__skb_pull(skb, ah_hlen + ihl);
|
|
|
- skb_set_transport_header(skb, -ihl);
|
|
|
+ if (x->props.mode == XFRM_MODE_TUNNEL)
|
|
|
+ skb_reset_transport_header(skb);
|
|
|
+ else
|
|
|
+ skb_set_transport_header(skb, -ihl);
|
|
|
|
|
|
err = nexthdr;
|
|
|
|