diff options
author | Steffen Klassert <steffen.klassert@secunet.com> | 2014-06-18 12:34:21 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2014-08-14 09:51:47 +0800 |
commit | c4b76e18681b8574f61bdf95981270c94ae82938 (patch) | |
tree | 01bc23b659a09beda7a7eddaf30b13c1ea0e1083 | |
parent | 34ada3629e591ddb43c1aa799f5e4f39b1a1597a (diff) | |
download | lwn-c4b76e18681b8574f61bdf95981270c94ae82938.tar.gz lwn-c4b76e18681b8574f61bdf95981270c94ae82938.zip |
xfrm: Fix refcount imbalance in xfrm_lookup
[ Upstream commit b7eea4545ea775df957460f58eb56085a8892856 ]
xfrm_lookup must return a dst_entry with a refcount for the caller.
Git commit 1a1ccc96abb ("xfrm: Remove caching of xfrm_policy_sk_bundles")
removed this refcount for the socket policy case accidentally.
This patch restores it and sets DST_NOCACHE flag to make sure
that the dst_entry is freed when the refcount becomes null.
Fixes: 1a1ccc96abb ("xfrm: Remove caching of xfrm_policy_sk_bundles")
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | net/xfrm/xfrm_policy.c | 2 |
1 files changed, 2 insertions, 0 deletions
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c index c08fbd11ceff..ed608432e4f9 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -2107,6 +2107,8 @@ struct dst_entry *xfrm_lookup(struct net *net, struct dst_entry *dst_orig, goto no_transform; } + dst_hold(&xdst->u.dst); + xdst->u.dst.flags |= DST_NOCACHE; route = xdst->route; } } |