[Devel] [PATCH RH7 05/11] net: Cleanup in copy_net_ns()

Kirill Tkhai ktkhai at virtuozzo.com
Wed May 27 18:54:02 MSK 2020


ms commit 5ba049a5cc8e

Line up destructors actions in the revers order
to constructors. Next patches will add more actions,
and this will be comfortable, if there is the such
order.

Signed-off-by: Kirill Tkhai <ktkhai at virtuozzo.com>
Acked-by: Andrei Vagin <avagin at virtuozzo.com>
Signed-off-by: David S. Miller <davem at davemloft.net>
---
 net/core/net_namespace.c |   23 +++++++++++++++--------
 1 file changed, 15 insertions(+), 8 deletions(-)

diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index 6cc399656a09..69063828c7c0 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -408,28 +408,35 @@ struct net *copy_net_ns(unsigned long flags,
 		return ERR_PTR(-ENOSPC);
 
 	if (atomic_dec_if_positive(&ve->netns_avail_nr) < 0) {
-		dec_net_namespaces(ucounts);
-		return ERR_PTR(-ENOMEM);
+		rv = -ENOMEM;
+		goto dec_ucounts;
+
 	}
 
 	net = net_alloc();
 	if (!net) {
-		dec_net_namespaces(ucounts);
-		atomic_inc(&ve->netns_avail_nr);
-		return ERR_PTR(-ENOMEM);
+		rv = -ENOMEM;
+		goto inc_avail_nr;
 	}
 
+	atomic_set(&net->passive, 1);
+	net->ucounts = ucounts;
 	get_user_ns(user_ns);
 
-	mutex_lock(&net_mutex);
-	net->ucounts = ucounts;
+	rv = mutex_lock_killable(&net_mutex);
+	if (rv < 0)
+		goto put_userns;
+
 	rv = setup_net(net, user_ns);
 	mutex_unlock(&net_mutex);
 	if (rv < 0) {
-		dec_net_namespaces(ucounts);
+put_userns:
 		put_user_ns(user_ns);
 		net_drop_ns(net);
+inc_avail_nr:
 		atomic_inc(&ve->netns_avail_nr);
+dec_ucounts:
+		dec_net_namespaces(ucounts);
 		return ERR_PTR(rv);
 	}
 	return net;




More information about the Devel mailing list