diff options
author | Andy Lutomirski <luto@amacapital.net> | 2013-08-22 14:39:16 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-08-27 13:52:52 -0400 |
commit | c2b1df2eb42978073ec27c99cc199d20ae48b849 (patch) | |
tree | 5b7335ad7fc7e17a26a2e724c7f1f93970bc75fc | |
parent | d661684cf6820331feae71146c35da83d794467e (diff) |
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: Andy Lutomirski <luto@amacapital.net>
Reviewed-by: "Eric W. Biederman" <ebiederm@xmission.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | include/linux/nsproxy.h | 6 | ||||
-rw-r--r-- | kernel/fork.c | 5 | ||||
-rw-r--r-- | kernel/nsproxy.c | 27 | ||||
-rw-r--r-- | kernel/pid_namespace.c | 4 |
4 files changed, 24 insertions, 18 deletions
diff --git a/include/linux/nsproxy.h b/include/linux/nsproxy.h index 10e5947491c7..b4ec59d159ac 100644 --- a/include/linux/nsproxy.h +++ b/include/linux/nsproxy.h | |||
@@ -14,6 +14,10 @@ struct fs_struct; | |||
14 | * A structure to contain pointers to all per-process | 14 | * A structure to contain pointers to all per-process |
15 | * namespaces - fs (mount), uts, network, sysvipc, etc. | 15 | * namespaces - fs (mount), uts, network, sysvipc, etc. |
16 | * | 16 | * |
17 | * The pid namespace is an exception -- it's accessed using | ||
18 | * task_active_pid_ns. The pid namespace here is the | ||
19 | * namespace that children will use. | ||
20 | * | ||
17 | * 'count' is the number of tasks holding a reference. | 21 | * 'count' is the number of tasks holding a reference. |
18 | * The count for each namespace, then, will be the number | 22 | * The count for each namespace, then, will be the number |
19 | * of nsproxies pointing to it, not the number of tasks. | 23 | * of nsproxies pointing to it, not the number of tasks. |
@@ -27,7 +31,7 @@ struct nsproxy { | |||
27 | struct uts_namespace *uts_ns; | 31 | struct uts_namespace *uts_ns; |
28 | struct ipc_namespace *ipc_ns; | 32 | struct ipc_namespace *ipc_ns; |
29 | struct mnt_namespace *mnt_ns; | 33 | struct mnt_namespace *mnt_ns; |
30 | struct pid_namespace *pid_ns; | 34 | struct pid_namespace *pid_ns_for_children; |
31 | struct net *net_ns; | 35 | struct net *net_ns; |
32 | }; | 36 | }; |
33 | extern struct nsproxy init_nsproxy; | 37 | extern struct nsproxy init_nsproxy; |
diff --git a/kernel/fork.c b/kernel/fork.c index e23bb19e2a3e..bf46287c91a4 100644 --- a/kernel/fork.c +++ b/kernel/fork.c | |||
@@ -1177,7 +1177,8 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1177 | * don't allow the creation of threads. | 1177 | * don't allow the creation of threads. |
1178 | */ | 1178 | */ |
1179 | if ((clone_flags & (CLONE_VM|CLONE_NEWPID)) && | 1179 | if ((clone_flags & (CLONE_VM|CLONE_NEWPID)) && |
1180 | (task_active_pid_ns(current) != current->nsproxy->pid_ns)) | 1180 | (task_active_pid_ns(current) != |
1181 | current->nsproxy->pid_ns_for_children)) | ||
1181 | return ERR_PTR(-EINVAL); | 1182 | return ERR_PTR(-EINVAL); |
1182 | 1183 | ||
1183 | retval = security_task_create(clone_flags); | 1184 | retval = security_task_create(clone_flags); |
@@ -1351,7 +1352,7 @@ static struct task_struct *copy_process(unsigned long clone_flags, | |||
1351 | 1352 | ||
1352 | if (pid != &init_struct_pid) { | 1353 | if (pid != &init_struct_pid) { |
1353 | retval = -ENOMEM; | 1354 | retval = -ENOMEM; |
1354 | pid = alloc_pid(p->nsproxy->pid_ns); | 1355 | pid = alloc_pid(p->nsproxy->pid_ns_for_children); |
1355 | if (!pid) | 1356 | if (!pid) |
1356 | goto bad_fork_cleanup_io; | 1357 | goto bad_fork_cleanup_io; |
1357 | } | 1358 | } |
diff --git a/kernel/nsproxy.c b/kernel/nsproxy.c index 364ceab15f0c..997cbb951a3b 100644 --- a/kernel/nsproxy.c +++ b/kernel/nsproxy.c | |||
@@ -29,15 +29,15 @@ | |||
29 | static struct kmem_cache *nsproxy_cachep; | 29 | static struct kmem_cache *nsproxy_cachep; |
30 | 30 | ||
31 | struct nsproxy init_nsproxy = { | 31 | struct nsproxy init_nsproxy = { |
32 | .count = ATOMIC_INIT(1), | 32 | .count = ATOMIC_INIT(1), |
33 | .uts_ns = &init_uts_ns, | 33 | .uts_ns = &init_uts_ns, |
34 | #if defined(CONFIG_POSIX_MQUEUE) || defined(CONFIG_SYSVIPC) | 34 | #if defined(CONFIG_POSIX_MQUEUE) || defined(CONFIG_SYSVIPC) |
35 | .ipc_ns = &init_ipc_ns, | 35 | .ipc_ns = &init_ipc_ns, |
36 | #endif | 36 | #endif |
37 | .mnt_ns = NULL, | 37 | .mnt_ns = NULL, |
38 | .pid_ns = &init_pid_ns, | 38 | .pid_ns_for_children = &init_pid_ns, |
39 | #ifdef CONFIG_NET | 39 | #ifdef CONFIG_NET |
40 | .net_ns = &init_net, | 40 | .net_ns = &init_net, |
41 | #endif | 41 | #endif |
42 | }; | 42 | }; |
43 | 43 | ||
@@ -85,9 +85,10 @@ static struct nsproxy *create_new_namespaces(unsigned long flags, | |||
85 | goto out_ipc; | 85 | goto out_ipc; |
86 | } | 86 | } |
87 | 87 | ||
88 | new_nsp->pid_ns = copy_pid_ns(flags, user_ns, tsk->nsproxy->pid_ns); | 88 | new_nsp->pid_ns_for_children = |
89 | if (IS_ERR(new_nsp->pid_ns)) { | 89 | copy_pid_ns(flags, user_ns, tsk->nsproxy->pid_ns_for_children); |
90 | err = PTR_ERR(new_nsp->pid_ns); | 90 | if (IS_ERR(new_nsp->pid_ns_for_children)) { |
91 | err = PTR_ERR(new_nsp->pid_ns_for_children); | ||
91 | goto out_pid; | 92 | goto out_pid; |
92 | } | 93 | } |
93 | 94 | ||
@@ -100,8 +101,8 @@ static struct nsproxy *create_new_namespaces(unsigned long flags, | |||
100 | return new_nsp; | 101 | return new_nsp; |
101 | 102 | ||
102 | out_net: | 103 | out_net: |
103 | if (new_nsp->pid_ns) | 104 | if (new_nsp->pid_ns_for_children) |
104 | put_pid_ns(new_nsp->pid_ns); | 105 | put_pid_ns(new_nsp->pid_ns_for_children); |
105 | out_pid: | 106 | out_pid: |
106 | if (new_nsp->ipc_ns) | 107 | if (new_nsp->ipc_ns) |
107 | put_ipc_ns(new_nsp->ipc_ns); | 108 | put_ipc_ns(new_nsp->ipc_ns); |
@@ -174,8 +175,8 @@ void free_nsproxy(struct nsproxy *ns) | |||
174 | put_uts_ns(ns->uts_ns); | 175 | put_uts_ns(ns->uts_ns); |
175 | if (ns->ipc_ns) | 176 | if (ns->ipc_ns) |
176 | put_ipc_ns(ns->ipc_ns); | 177 | put_ipc_ns(ns->ipc_ns); |
177 | if (ns->pid_ns) | 178 | if (ns->pid_ns_for_children) |
178 | put_pid_ns(ns->pid_ns); | 179 | put_pid_ns(ns->pid_ns_for_children); |
179 | put_net(ns->net_ns); | 180 | put_net(ns->net_ns); |
180 | kmem_cache_free(nsproxy_cachep, ns); | 181 | kmem_cache_free(nsproxy_cachep, ns); |
181 | } | 182 | } |
diff --git a/kernel/pid_namespace.c b/kernel/pid_namespace.c index 6917e8edb48e..601bb361c235 100644 --- a/kernel/pid_namespace.c +++ b/kernel/pid_namespace.c | |||
@@ -349,8 +349,8 @@ static int pidns_install(struct nsproxy *nsproxy, void *ns) | |||
349 | if (ancestor != active) | 349 | if (ancestor != active) |
350 | return -EINVAL; | 350 | return -EINVAL; |
351 | 351 | ||
352 | put_pid_ns(nsproxy->pid_ns); | 352 | put_pid_ns(nsproxy->pid_ns_for_children); |
353 | nsproxy->pid_ns = get_pid_ns(new); | 353 | nsproxy->pid_ns_for_children = get_pid_ns(new); |
354 | return 0; | 354 | return 0; |
355 | } | 355 | } |
356 | 356 | ||