diff options
author | Steffen Klassert <steffen.klassert@secunet.com> | 2014-06-18 12:34:21 +0200 |
---|---|---|
committer | Steffen Klassert <steffen.klassert@secunet.com> | 2014-06-26 07:52:42 +0200 |
commit | b7eea4545ea775df957460f58eb56085a8892856 (patch) | |
tree | 641c49c3387d197987924261652ace642d106c12 /net/xfrm | |
parent | d7933ab727ed035bdf420d7381b831ba959cecc5 (diff) | |
download | linux-exynos-b7eea4545ea775df957460f58eb56085a8892856.tar.gz linux-exynos-b7eea4545ea775df957460f58eb56085a8892856.tar.bz2 linux-exynos-b7eea4545ea775df957460f58eb56085a8892856.zip |
xfrm: Fix refcount imbalance in xfrm_lookup
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>
Diffstat (limited to 'net/xfrm')
-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 a8ef5108e0d8..0525d78ba328 100644 --- a/net/xfrm/xfrm_policy.c +++ b/net/xfrm/xfrm_policy.c @@ -2097,6 +2097,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; } } |