diff options
Diffstat (limited to 'net/xfrm/xfrm_input.c')
-rw-r--r-- | net/xfrm/xfrm_input.c | 7 |
1 files changed, 6 insertions, 1 deletions
diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c index 684c0bc01e2c..d5635908587f 100644 --- a/net/xfrm/xfrm_input.c +++ b/net/xfrm/xfrm_input.c | |||
@@ -346,6 +346,12 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type) | |||
346 | 346 | ||
347 | skb->sp->xvec[skb->sp->len++] = x; | 347 | skb->sp->xvec[skb->sp->len++] = x; |
348 | 348 | ||
349 | skb_dst_force(skb); | ||
350 | if (!skb_dst(skb)) { | ||
351 | XFRM_INC_STATS(net, LINUX_MIB_XFRMINERROR); | ||
352 | goto drop; | ||
353 | } | ||
354 | |||
349 | lock: | 355 | lock: |
350 | spin_lock(&x->lock); | 356 | spin_lock(&x->lock); |
351 | 357 | ||
@@ -385,7 +391,6 @@ lock: | |||
385 | XFRM_SKB_CB(skb)->seq.input.low = seq; | 391 | XFRM_SKB_CB(skb)->seq.input.low = seq; |
386 | XFRM_SKB_CB(skb)->seq.input.hi = seq_hi; | 392 | XFRM_SKB_CB(skb)->seq.input.hi = seq_hi; |
387 | 393 | ||
388 | skb_dst_force(skb); | ||
389 | dev_hold(skb->dev); | 394 | dev_hold(skb->dev); |
390 | 395 | ||
391 | if (crypto_done) | 396 | if (crypto_done) |