aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSteffen Klassert <steffen.klassert@secunet.com>2022-08-16 08:50:29 +0200
committerSteffen Klassert <steffen.klassert@secunet.com>2022-08-16 08:50:29 +0200
commitd6b3590c6de67ab0235d01d79359781171679777 (patch)
tree265fbd1731704a81643f7c05ce08cbfb6cf353aa
parentd604bdbca7610fa5f1bf37050c53cb7dcf489f18 (diff)
downloadlinux-stk-nft-bulk-v5.15-3.tar.gz
xfrm: Do dev_hold only on real async resumption.nft-bulk-v5.15-3
-rw-r--r--net/xfrm/xfrm_input.c9
1 files changed, 4 insertions, 5 deletions
diff --git a/net/xfrm/xfrm_input.c b/net/xfrm/xfrm_input.c
index 40892fb4755b04..03cb938aeea6c0 100644
--- a/net/xfrm/xfrm_input.c
+++ b/net/xfrm/xfrm_input.c
@@ -562,8 +562,6 @@ lock:
XFRM_SKB_CB(skb)->seq.input.low = seq;
XFRM_SKB_CB(skb)->seq.input.hi = seq_hi;
- dev_hold(skb->dev);
-
if (bulk)
return 0;
@@ -572,11 +570,11 @@ lock:
else
nexthdr = x->type->input(x, skb);
- if (nexthdr == -EINPROGRESS)
+ if (nexthdr == -EINPROGRESS) {
+ dev_hold(skb->dev);
return nexthdr;
+ }
resume:
- dev_put(skb->dev);
-
spin_lock(&x->lock);
if (nexthdr < 0) {
if (nexthdr == -EBADMSG) {
@@ -870,6 +868,7 @@ EXPORT_SYMBOL(xfrm_input);
int xfrm_input_resume(struct sk_buff *skb, int nexthdr)
{
+ dev_put(skb->dev);
return xfrm_input(skb, nexthdr, 0, -1);
}
EXPORT_SYMBOL(xfrm_input_resume);