Commit c2b1df2e authored by Andy Lutomirski's avatar Andy Lutomirski Committed by David S. Miller

Rename nsproxy.pid_ns to nsproxy.pid_ns_for_children

nsproxy.pid_ns is *not* the task's pid namespace.  The name should clarify
that.

This makes it more obvious that setns on a pid namespace is weird --
it won't change the pid namespace shown in procfs.
Signed-off-by: default avatarAndy Lutomirski <luto@amacapital.net>
Reviewed-by: default avatar"Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent d661684c
...@@ -14,6 +14,10 @@ struct fs_struct; ...@@ -14,6 +14,10 @@ struct fs_struct;
* A structure to contain pointers to all per-process * A structure to contain pointers to all per-process
* namespaces - fs (mount), uts, network, sysvipc, etc. * namespaces - fs (mount), uts, network, sysvipc, etc.
* *
* The pid namespace is an exception -- it's accessed using
* task_active_pid_ns. The pid namespace here is the
* namespace that children will use.
*
* 'count' is the number of tasks holding a reference. * 'count' is the number of tasks holding a reference.
* The count for each namespace, then, will be the number * The count for each namespace, then, will be the number
* of nsproxies pointing to it, not the number of tasks. * of nsproxies pointing to it, not the number of tasks.
...@@ -27,7 +31,7 @@ struct nsproxy { ...@@ -27,7 +31,7 @@ struct nsproxy {
struct uts_namespace *uts_ns; struct uts_namespace *uts_ns;
struct ipc_namespace *ipc_ns; struct ipc_namespace *ipc_ns;
struct mnt_namespace *mnt_ns; struct mnt_namespace *mnt_ns;
struct pid_namespace *pid_ns; struct pid_namespace *pid_ns_for_children;
struct net *net_ns; struct net *net_ns;
}; };
extern struct nsproxy init_nsproxy; extern struct nsproxy init_nsproxy;
......
...@@ -1177,7 +1177,8 @@ static struct task_struct *copy_process(unsigned long clone_flags, ...@@ -1177,7 +1177,8 @@ static struct task_struct *copy_process(unsigned long clone_flags,
* don't allow the creation of threads. * don't allow the creation of threads.
*/ */
if ((clone_flags & (CLONE_VM|CLONE_NEWPID)) && if ((clone_flags & (CLONE_VM|CLONE_NEWPID)) &&
(task_active_pid_ns(current) != current->nsproxy->pid_ns)) (task_active_pid_ns(current) !=
current->nsproxy->pid_ns_for_children))
return ERR_PTR(-EINVAL); return ERR_PTR(-EINVAL);
retval = security_task_create(clone_flags); retval = security_task_create(clone_flags);
...@@ -1351,7 +1352,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, ...@@ -1351,7 +1352,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
if (pid != &init_struct_pid) { if (pid != &init_struct_pid) {
retval = -ENOMEM; retval = -ENOMEM;
pid = alloc_pid(p->nsproxy->pid_ns); pid = alloc_pid(p->nsproxy->pid_ns_for_children);
if (!pid) if (!pid)
goto bad_fork_cleanup_io; goto bad_fork_cleanup_io;
} }
......
...@@ -29,15 +29,15 @@ ...@@ -29,15 +29,15 @@
static struct kmem_cache *nsproxy_cachep; static struct kmem_cache *nsproxy_cachep;
struct nsproxy init_nsproxy = { struct nsproxy init_nsproxy = {
.count = ATOMIC_INIT(1), .count = ATOMIC_INIT(1),
.uts_ns = &init_uts_ns, .uts_ns = &init_uts_ns,
#if defined(CONFIG_POSIX_MQUEUE) || defined(CONFIG_SYSVIPC) #if defined(CONFIG_POSIX_MQUEUE) || defined(CONFIG_SYSVIPC)
.ipc_ns = &init_ipc_ns, .ipc_ns = &init_ipc_ns,
#endif #endif
.mnt_ns = NULL, .mnt_ns = NULL,
.pid_ns = &init_pid_ns, .pid_ns_for_children = &init_pid_ns,
#ifdef CONFIG_NET #ifdef CONFIG_NET
.net_ns = &init_net, .net_ns = &init_net,
#endif #endif
}; };
...@@ -85,9 +85,10 @@ static struct nsproxy *create_new_namespaces(unsigned long flags, ...@@ -85,9 +85,10 @@ static struct nsproxy *create_new_namespaces(unsigned long flags,
goto out_ipc; goto out_ipc;
} }
new_nsp->pid_ns = copy_pid_ns(flags, user_ns, tsk->nsproxy->pid_ns); new_nsp->pid_ns_for_children =
if (IS_ERR(new_nsp->pid_ns)) { copy_pid_ns(flags, user_ns, tsk->nsproxy->pid_ns_for_children);
err = PTR_ERR(new_nsp->pid_ns); if (IS_ERR(new_nsp->pid_ns_for_children)) {
err = PTR_ERR(new_nsp->pid_ns_for_children);
goto out_pid; goto out_pid;
} }
...@@ -100,8 +101,8 @@ static struct nsproxy *create_new_namespaces(unsigned long flags, ...@@ -100,8 +101,8 @@ static struct nsproxy *create_new_namespaces(unsigned long flags,
return new_nsp; return new_nsp;
out_net: out_net:
if (new_nsp->pid_ns) if (new_nsp->pid_ns_for_children)
put_pid_ns(new_nsp->pid_ns); put_pid_ns(new_nsp->pid_ns_for_children);
out_pid: out_pid:
if (new_nsp->ipc_ns) if (new_nsp->ipc_ns)
put_ipc_ns(new_nsp->ipc_ns); put_ipc_ns(new_nsp->ipc_ns);
...@@ -174,8 +175,8 @@ void free_nsproxy(struct nsproxy *ns) ...@@ -174,8 +175,8 @@ void free_nsproxy(struct nsproxy *ns)
put_uts_ns(ns->uts_ns); put_uts_ns(ns->uts_ns);
if (ns->ipc_ns) if (ns->ipc_ns)
put_ipc_ns(ns->ipc_ns); put_ipc_ns(ns->ipc_ns);
if (ns->pid_ns) if (ns->pid_ns_for_children)
put_pid_ns(ns->pid_ns); put_pid_ns(ns->pid_ns_for_children);
put_net(ns->net_ns); put_net(ns->net_ns);
kmem_cache_free(nsproxy_cachep, ns); kmem_cache_free(nsproxy_cachep, ns);
} }
......
...@@ -349,8 +349,8 @@ static int pidns_install(struct nsproxy *nsproxy, void *ns) ...@@ -349,8 +349,8 @@ static int pidns_install(struct nsproxy *nsproxy, void *ns)
if (ancestor != active) if (ancestor != active)
return -EINVAL; return -EINVAL;
put_pid_ns(nsproxy->pid_ns); put_pid_ns(nsproxy->pid_ns_for_children);
nsproxy->pid_ns = get_pid_ns(new); nsproxy->pid_ns_for_children = get_pid_ns(new);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment