summaryrefslogtreecommitdiffstats
path: root/net/xfrm/xfrm_policy.c
diff options
context:
space:
mode:
authorSteffen Klassert <steffen.klassert@secunet.com>2017-10-24 10:28:43 +0200
committerSteffen Klassert <steffen.klassert@secunet.com>2017-10-24 13:40:36 +0200
commitec650b23ecda1e354a9a2961833222552e629ba8 (patch)
tree3e28d9e97e9d080db2d172bcb5fc0953dc0afd38 /net/xfrm/xfrm_policy.c
parent864f5af3a3525f588391cd230cb8129ad758708e (diff)
downloadlinux-ec650b23ecda1e354a9a2961833222552e629ba8.tar.gz
linux-ec650b23ecda1e354a9a2961833222552e629ba8.tar.bz2
linux-ec650b23ecda1e354a9a2961833222552e629ba8.zip
xfrm: Fix xfrm_dst_cache memleak
We have a memleak whenever a flow matches a policy without a matching SA. In this case we generate a dummy bundle and take an additional refcount on the dst_entry. This was needed as long as we had the flowcache. The flowcache removal patches deleted all related refcounts but forgot the one for the dummy bundle case. Fix the memleak by removing this refcount. Fixes: 3ca28286ea80 ("xfrm_policy: bypass flow_cache_lookup") Reported-by: Maxime Bizon <mbizon@freebox.fr> Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Diffstat (limited to 'net/xfrm/xfrm_policy.c')
-rw-r--r--net/xfrm/xfrm_policy.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/net/xfrm/xfrm_policy.c b/net/xfrm/xfrm_policy.c
index 2746b62a8944..8cafb3c0a4ac 100644
--- a/net/xfrm/xfrm_policy.c
+++ b/net/xfrm/xfrm_policy.c
@@ -2076,7 +2076,6 @@ make_dummy_bundle:
xdst->num_xfrms = num_xfrms;
memcpy(xdst->pols, pols, sizeof(struct xfrm_policy *) * num_pols);
- dst_hold(&xdst->u.dst);
return xdst;
inc_error: