[RH7] net: Bring clearness to ve_netns deassignment

Submitted by Kirill Tkhai on May 26, 2020, 4:36 p.m.

Details

Message ID 159051098350.216336.3382984665523691754.stgit@localhost.localdomain
State New
Series "net: Bring clearness to ve_netns deassignment"
Headers show

Commit Message

Kirill Tkhai May 26, 2020, 4:36 p.m.
ve_netns is cleared in two places and this looks strange.
ve_drop_context() puts net right before it clears ve_netns,
so the probability of that cleanup_net() will be first is
very small. So, let's just reorder lines in ve_drop_context(),
and the situation (ve->ve_netns == net) in cleanup_net()
will become impossible.

Signed-off-by: Kirill Tkhai <ktkhai@virtuozzo.com>
---
 kernel/ve/ve.c           |    4 +++-
 net/core/net_namespace.c |    2 --
 2 files changed, 3 insertions(+), 3 deletions(-)

Patch hide | download patch | download mbox

diff --git a/kernel/ve/ve.c b/kernel/ve/ve.c
index b423a9676679..f88452d0396d 100644
--- a/kernel/ve/ve.c
+++ b/kernel/ve/ve.c
@@ -462,8 +462,10 @@  static void ve_grab_context(struct ve_struct *ve)
 static void ve_drop_context(struct ve_struct *ve)
 {
 	struct nsproxy *ve_ns = ve->ve_ns;
-	put_net(ve->ve_netns);
+	struct net *net = ve->ve_netns;
+
 	ve->ve_netns = NULL;
+	put_net(net);
 
 	/* Allows to dereference init_cred and init_task if ve_ns is set */
 	rcu_assign_pointer(ve->ve_ns, NULL);
diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index 3348f7c550e1..69893c8ae6a0 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -499,8 +499,6 @@  static void cleanup_net(struct work_struct *work)
 		struct ve_struct *ve = net->owner_ve;
 
 		atomic_inc(&ve->netns_avail_nr);
-		if (ve->ve_netns == net)
-			ve->ve_netns = NULL;
 		put_ve(ve);
 	}