diff options
author | Serge E. Hallyn <serue@us.ibm.com> | 2006-10-02 02:18:14 -0700 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-02 07:57:21 -0700 |
commit | 4865ecf1315b450ab3317a745a6678c04d311e40 (patch) | |
tree | 6cf5d3028f8642eba2a8094eb413db080cc9219c /kernel/nsproxy.c | |
parent | 96b644bdec977b97a45133e5b4466ba47a7a5e65 (diff) | |
download | linux-4865ecf1315b450ab3317a745a6678c04d311e40.tar.bz2 |
[PATCH] namespaces: utsname: implement utsname namespaces
This patch defines the uts namespace and some manipulators.
Adds the uts namespace to task_struct, and initializes a
system-wide init namespace.
It leaves a #define for system_utsname so sysctl will compile.
This define will be removed in a separate patch.
[akpm@osdl.org: build fix, cleanup]
Signed-off-by: Serge Hallyn <serue@us.ibm.com>
Cc: Kirill Korotaev <dev@openvz.org>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Herbert Poetzl <herbert@13thfloor.at>
Cc: Andrey Savochkin <saw@sw.ru>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'kernel/nsproxy.c')
-rw-r--r-- | kernel/nsproxy.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/kernel/nsproxy.c b/kernel/nsproxy.c index e10385c17f73..47c19280c55b 100644 --- a/kernel/nsproxy.c +++ b/kernel/nsproxy.c @@ -14,6 +14,7 @@ #include <linux/nsproxy.h> #include <linux/init_task.h> #include <linux/namespace.h> +#include <linux/utsname.h> struct nsproxy init_nsproxy = INIT_NSPROXY(init_nsproxy); @@ -59,6 +60,8 @@ struct nsproxy *dup_namespaces(struct nsproxy *orig) if (ns) { if (ns->namespace) get_namespace(ns->namespace); + if (ns->uts_ns) + get_uts_ns(ns->uts_ns); } return ns; @@ -97,6 +100,15 @@ int copy_namespaces(int flags, struct task_struct *tsk) goto out; } + err = copy_utsname(flags, tsk); + if (err) { + if (new_ns->namespace) + put_namespace(new_ns->namespace); + tsk->nsproxy = old_ns; + put_nsproxy(new_ns); + goto out; + } + out: put_nsproxy(old_ns); return err; @@ -106,5 +118,7 @@ void free_nsproxy(struct nsproxy *ns) { if (ns->namespace) put_namespace(ns->namespace); + if (ns->uts_ns) + put_uts_ns(ns->uts_ns); kfree(ns); } |