Patch "vxlan: eliminate cached dst leak" has been added to the 4.9-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
vxlan: eliminate cached dst leak
to the 4.9-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
vxlan-eliminate-cached-dst-leak.patch
and it can be found in the queue-4.9 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From foo@baz Thu Jun 8 08:58:26 CEST 2017
From: Lance Richardson <[email protected]>
Date: Mon, 29 May 2017 13:25:57 -0400
Subject: vxlan: eliminate cached dst leak
From: Lance Richardson <[email protected]>
[ Upstream commit 35cf2845563c1aaa01d27bd34d64795c4ae72700 ]
After commit 0c1d70af924b ("net: use dst_cache for vxlan device"), cached dst entries could be leaked when more than one remote was present for a given vxlan_fdb entry, causing subsequent netns operations to block indefinitely and "unregister_netdevice: waiting for lo to become free." messages to appear in the kernel log.
Fix by properly releasing cached dst and freeing resources in this case.
--- drivers/net/vxlan.c | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-)
drivers/net/vxlan.c +17 -3
@@ -717,6 +717,22 @@ static void vxlan_fdb_destroy(struct vxlcall_rcu (&f->rcu, vxlan_fdb_free); } +static void vxlan_dst_free (struct rcu_head *head) +{ + struct vxlan_rdst *rd = container_of(head, struct vxlan_rdst, rcu); + +dst_cache_destroy (&rd->dst_cache); +kfree (rd); +} + +static void vxlan_fdb_dst_destroy (struct vxlan_dev *vxlan,struct vxlan_fdb *f, +struct vxlan_rdst *rd) +{ +list_del_rcu (&rd->list); +vxlan_fdb_notify (vxlan, f, rd,RTM_DELNEIGH ); +call_rcu (&rd->rcu, vxlan_dst_free); +} +static int vxlan_fdb_parse (struct nlattr *tb[],struct vxlan_dev *vxlan,union vxlan_addr *ip,__be16 *port,__be32 *vni,u32 *ifindex)
@@ -847,9 +863,7 @@ static int vxlan_fdb_delete(struct ndmsg* otherwise destroy the fdb entry */ if (rd && !list_is_singular (&f->remotes)) { -list_del_rcu (&rd->list); -vxlan_fdb_notify (vxlan, f, rd,RTM_DELNEIGH ); -kfree_rcu (rd, rcu); +vxlan_fdb_dst_destroy (vxlan, f, rd); goto out; }
Patches currently in stable-queue which might be from [email protected] are
queue-4.9/vxlan-eliminate-cached-dst-leak.patch