From: Al Viro <[email protected]>

Signed-off-by: Al Viro <[email protected]>

(cherry picked from VZ8 commit ff24870f46d51d79fc74a241fd7c12ccb933c69f)

https://jira.sw.ru/browse/PSBM-102357

Signed-off-by: Pavel Tikhomirov <[email protected]>
---
 net/core/net_namespace.c | 16 ++++++++++------
 1 file changed, 10 insertions(+), 6 deletions(-)

diff --git a/net/core/net_namespace.c b/net/core/net_namespace.c
index d7dc5a108aca..2a1413dd92a0 100644
--- a/net/core/net_namespace.c
+++ b/net/core/net_namespace.c
@@ -573,7 +573,7 @@ struct net *get_net_ns_by_fd(int fd)
 
        ei = get_proc_ns(file_inode(file));
        if (ei->ns_ops == &netns_operations)
-               net = get_net(ei->ns);
+               net = get_net(container_of(ei->ns, struct net, ns));
        else
                net = ERR_PTR(-EINVAL);
 
@@ -1061,17 +1061,22 @@ static void *netns_get(struct task_struct *task)
                net = get_net(nsproxy->net_ns);
        task_unlock(task);
 
-       return net;
+       return net ? &net->ns : NULL;
+}
+
+static inline struct net *to_net_ns(struct ns_common *ns)
+{
+       return container_of(ns, struct net, ns);
 }
 
 static void netns_put(void *ns)
 {
-       put_net(ns);
+       put_net(to_net_ns(ns));
 }
 
 static int netns_install(struct nsproxy *nsproxy, void *ns)
 {
-       struct net *net = ns;
+       struct net *net = to_net_ns(ns);
 
        if (!ns_capable(net->user_ns, CAP_SYS_ADMIN) ||
            !ns_capable(current_user_ns(), CAP_SYS_ADMIN))
@@ -1084,8 +1089,7 @@ static int netns_install(struct nsproxy *nsproxy, void 
*ns)
 
 static unsigned int netns_inum(void *ns)
 {
-       struct net *net = ns;
-       return net->ns.inum;
+       return ((struct ns_common *)ns)->inum;
 }
 
 const struct proc_ns_operations netns_operations = {
-- 
2.24.1

_______________________________________________
Devel mailing list
[email protected]
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to