aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2007-11-14 20:00:13 -0500
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-11-14 21:45:43 -0500
commit57d5f66b86079efac5c9a7843cce2a9bcbe58fb8 (patch)
tree720942bfb200f46da6c77535a110106dce80f9eb
parent42614fcde7bfdcbe43a7b17035c167dfebc354dd (diff)
pidns: Place under CONFIG_EXPERIMENTAL
This is my trivial patch to swat innumerable little bugs with a single blow. After some intensive review (my apologies for not having gotten to this sooner) what we have looks like a good base to build on with the current pid namespace code but it is not complete, and it is still much to simple to find issues where the kernel does the wrong thing outside of the initial pid namespace. Until the dust settles and we are certain we have the ABI and the implementation is as correct as humanly possible let's keep process ID namespaces behind CONFIG_EXPERIMENTAL. Allowing us the option of fixing any ABI or other bugs we find as long as they are minor. Allowing users of the kernel to avoid those bugs simply by ensuring their kernel does not have support for multiple pid namespaces. [akpm@linux-foundation.org: coding-style cleanups] Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> Cc: Cedric Le Goater <clg@fr.ibm.com> Cc: Adrian Bunk <bunk@kernel.org> Cc: Jeremy Fitzhardinge <jeremy@goop.org> Cc: Kir Kolyshkin <kir@swsoft.com> Cc: Kirill Korotaev <dev@sw.ru> Cc: Pavel Emelyanov <xemul@openvz.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r--include/linux/pid_namespace.h23
-rw-r--r--init/Kconfig12
-rw-r--r--kernel/pid.c2
3 files changed, 37 insertions, 0 deletions
diff --git a/include/linux/pid_namespace.h b/include/linux/pid_namespace.h
index 0135c76c76c6..1689e28483e4 100644
--- a/include/linux/pid_namespace.h
+++ b/include/linux/pid_namespace.h
@@ -29,6 +29,7 @@ struct pid_namespace {
29 29
30extern struct pid_namespace init_pid_ns; 30extern struct pid_namespace init_pid_ns;
31 31
32#ifdef CONFIG_PID_NS
32static inline struct pid_namespace *get_pid_ns(struct pid_namespace *ns) 33static inline struct pid_namespace *get_pid_ns(struct pid_namespace *ns)
33{ 34{
34 if (ns != &init_pid_ns) 35 if (ns != &init_pid_ns)
@@ -45,6 +46,28 @@ static inline void put_pid_ns(struct pid_namespace *ns)
45 kref_put(&ns->kref, free_pid_ns); 46 kref_put(&ns->kref, free_pid_ns);
46} 47}
47 48
49#else /* !CONFIG_PID_NS */
50#include <linux/err.h>
51
52static inline struct pid_namespace *get_pid_ns(struct pid_namespace *ns)
53{
54 return ns;
55}
56
57static inline struct pid_namespace *
58copy_pid_ns(unsigned long flags, struct pid_namespace *ns)
59{
60 if (flags & CLONE_NEWPID)
61 ns = ERR_PTR(-EINVAL);
62 return ns;
63}
64
65static inline void put_pid_ns(struct pid_namespace *ns)
66{
67}
68
69#endif /* CONFIG_PID_NS */
70
48static inline struct pid_namespace *task_active_pid_ns(struct task_struct *tsk) 71static inline struct pid_namespace *task_active_pid_ns(struct task_struct *tsk)
49{ 72{
50 return tsk->nsproxy->pid_ns; 73 return tsk->nsproxy->pid_ns;
diff --git a/init/Kconfig b/init/Kconfig
index 5b92e3aa1366..c5b354b1409e 100644
--- a/init/Kconfig
+++ b/init/Kconfig
@@ -215,6 +215,18 @@ config USER_NS
215 vservers, to use user namespaces to provide different 215 vservers, to use user namespaces to provide different
216 user info for different servers. If unsure, say N. 216 user info for different servers. If unsure, say N.
217 217
218config PID_NS
219 bool "PID Namespaces (EXPERIMENTAL)"
220 default n
221 depends on EXPERIMENTAL
222 help
223 Suport process id namespaces. This allows having multiple
224 process with the same pid as long as they are in different
225 pid namespaces. This is a building block of containers.
226
227 Unless you want to work with an experimental feature
228 say N here.
229
218config AUDIT 230config AUDIT
219 bool "Auditing support" 231 bool "Auditing support"
220 depends on NET 232 depends on NET
diff --git a/kernel/pid.c b/kernel/pid.c
index d1db36b94674..f815455431bf 100644
--- a/kernel/pid.c
+++ b/kernel/pid.c
@@ -537,6 +537,7 @@ err_alloc:
537 return NULL; 537 return NULL;
538} 538}
539 539
540#ifdef CONFIG_PID_NS
540static struct pid_namespace *create_pid_namespace(int level) 541static struct pid_namespace *create_pid_namespace(int level)
541{ 542{
542 struct pid_namespace *ns; 543 struct pid_namespace *ns;
@@ -621,6 +622,7 @@ void free_pid_ns(struct kref *kref)
621 if (parent != NULL) 622 if (parent != NULL)
622 put_pid_ns(parent); 623 put_pid_ns(parent);
623} 624}
625#endif /* CONFIG_PID_NS */
624 626
625void zap_pid_ns_processes(struct pid_namespace *pid_ns) 627void zap_pid_ns_processes(struct pid_namespace *pid_ns)
626{ 628{