|
@@ -346,6 +346,12 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type)
|
|
|
|
|
|
|
|
skb->sp->xvec[skb->sp->len++] = x;
|
|
skb->sp->xvec[skb->sp->len++] = x;
|
|
|
|
|
|
|
|
|
|
+ skb_dst_force(skb);
|
|
|
|
|
+ if (!skb_dst(skb)) {
|
|
|
|
|
+ XFRM_INC_STATS(net, LINUX_MIB_XFRMINERROR);
|
|
|
|
|
+ goto drop;
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
lock:
|
|
lock:
|
|
|
spin_lock(&x->lock);
|
|
spin_lock(&x->lock);
|
|
|
|
|
|
|
@@ -385,7 +391,6 @@ lock:
|
|
|
XFRM_SKB_CB(skb)->seq.input.low = seq;
|
|
XFRM_SKB_CB(skb)->seq.input.low = seq;
|
|
|
XFRM_SKB_CB(skb)->seq.input.hi = seq_hi;
|
|
XFRM_SKB_CB(skb)->seq.input.hi = seq_hi;
|
|
|
|
|
|
|
|
- skb_dst_force(skb);
|
|
|
|
|
dev_hold(skb->dev);
|
|
dev_hold(skb->dev);
|
|
|
|
|
|
|
|
if (crypto_done)
|
|
if (crypto_done)
|