summaryrefslogtreecommitdiffstats
path: root/net/xfrm/xfrm_state.c
diff options
context:
space:
mode:
authorArtem Savkov <asavkov@redhat.com>2017-09-27 14:25:37 +0200
committerSteffen Klassert <steffen.klassert@secunet.com>2017-09-28 09:39:05 +0200
commitdd269db84908d4d3f7c0efed85bf9d8939fb0b9b (patch)
tree76b910665883a8e0be8f38b79bbcd004fd6be21b /net/xfrm/xfrm_state.c
parentvti: fix NULL dereference in xfrm_input() (diff)
downloadlinux-dd269db84908d4d3f7c0efed85bf9d8939fb0b9b.tar.xz
linux-dd269db84908d4d3f7c0efed85bf9d8939fb0b9b.zip
xfrm: don't call xfrm_policy_cache_flush under xfrm_state_lock
I might be wrong but it doesn't look like xfrm_state_lock is required for xfrm_policy_cache_flush and calling it under this lock triggers both "sleeping function called from invalid context" and "possible circular locking dependency detected" warnings on flush. Fixes: ec30d78c14a8 xfrm: add xdst pcpu cache Signed-off-by: Artem Savkov <asavkov@redhat.com> Acked-by: Florian Westphal <fw@strlen.de> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Diffstat (limited to 'net/xfrm/xfrm_state.c')
-rw-r--r--net/xfrm/xfrm_state.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/net/xfrm/xfrm_state.c b/net/xfrm/xfrm_state.c
index 0dab1cd79ce4..12213477cd3a 100644
--- a/net/xfrm/xfrm_state.c
+++ b/net/xfrm/xfrm_state.c
@@ -732,12 +732,12 @@ restart:
}
}
}
+out:
+ spin_unlock_bh(&net->xfrm.xfrm_state_lock);
if (cnt) {
err = 0;
xfrm_policy_cache_flush();
}
-out:
- spin_unlock_bh(&net->xfrm.xfrm_state_lock);
return err;
}
EXPORT_SYMBOL(xfrm_state_flush);