|
@@ -538,14 +538,16 @@ static int ah6_input(struct xfrm_state *x, struct sk_buff *skb)
|
|
if (!pskb_may_pull(skb, ah_hlen))
|
|
if (!pskb_may_pull(skb, ah_hlen))
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
- ip6h = ipv6_hdr(skb);
|
|
|
|
-
|
|
|
|
- skb_push(skb, hdr_len);
|
|
|
|
|
|
|
|
if ((err = skb_cow_data(skb, 0, &trailer)) < 0)
|
|
if ((err = skb_cow_data(skb, 0, &trailer)) < 0)
|
|
goto out;
|
|
goto out;
|
|
nfrags = err;
|
|
nfrags = err;
|
|
|
|
|
|
|
|
+ ah = (struct ip_auth_hdr *)skb->data;
|
|
|
|
+ ip6h = ipv6_hdr(skb);
|
|
|
|
+
|
|
|
|
+ skb_push(skb, hdr_len);
|
|
|
|
+
|
|
work_iph = ah_alloc_tmp(ahash, nfrags, hdr_len + ahp->icv_trunc_len);
|
|
work_iph = ah_alloc_tmp(ahash, nfrags, hdr_len + ahp->icv_trunc_len);
|
|
if (!work_iph)
|
|
if (!work_iph)
|
|
goto out;
|
|
goto out;
|