diff options
Diffstat (limited to 'net/xfrm/xfrm_input.c')
-rw-r--r-- | net/xfrm/xfrm_input.c | 3 |
1 files changed, 3 insertions, 0 deletions
diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c index ad7f5b3f9b61..1c4ad477ce93 100644 --- a/net/xfrm/xfrm_input.c +++ b/net/xfrm/xfrm_input.c | |||
@@ -292,12 +292,15 @@ int xfrm_input(struct sk_buff *skb, int nexthdr, __be32 spi, int encap_type) | |||
292 | XFRM_SKB_CB(skb)->seq.input.hi = seq_hi; | 292 | XFRM_SKB_CB(skb)->seq.input.hi = seq_hi; |
293 | 293 | ||
294 | skb_dst_force(skb); | 294 | skb_dst_force(skb); |
295 | dev_hold(skb->dev); | ||
295 | 296 | ||
296 | nexthdr = x->type->input(x, skb); | 297 | nexthdr = x->type->input(x, skb); |
297 | 298 | ||
298 | if (nexthdr == -EINPROGRESS) | 299 | if (nexthdr == -EINPROGRESS) |
299 | return 0; | 300 | return 0; |
300 | resume: | 301 | resume: |
302 | dev_put(skb->dev); | ||
303 | |||
301 | spin_lock(&x->lock); | 304 | spin_lock(&x->lock); |
302 | if (nexthdr <= 0) { | 305 | if (nexthdr <= 0) { |
303 | if (nexthdr == -EBADMSG) { | 306 | if (nexthdr == -EBADMSG) { |