diff options
author | Serge E. Hallyn <serue@us.ibm.com> | 2006-10-02 05:18:17 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2006-10-02 10:57:22 -0400 |
commit | 071df104f808b8195c40643dcb4d060681742e29 (patch) | |
tree | e5c3355e526e0182797d59c7e80062fbc2bb7d77 /include | |
parent | bf47fdcda65b44dbd674eeedcaa06e0aa28a5a00 (diff) |
[PATCH] namespaces: utsname: implement CLONE_NEWUTS flag
Implement a CLONE_NEWUTS flag, and use it at clone and sys_unshare.
[clg@fr.ibm.com: IPC unshare fix]
[bunk@stusta.de: 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: Adrian Bunk <bunk@stusta.de>
Signed-off-by: Cedric Le Goater <clg@fr.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'include')
-rw-r--r-- | include/linux/sched.h | 1 | ||||
-rw-r--r-- | include/linux/utsname.h | 11 |
2 files changed, 12 insertions, 0 deletions
diff --git a/include/linux/sched.h b/include/linux/sched.h index 46d6f5be72f2..a973e7012315 100644 --- a/include/linux/sched.h +++ b/include/linux/sched.h | |||
@@ -24,6 +24,7 @@ | |||
24 | #define CLONE_UNTRACED 0x00800000 /* set if the tracing process can't force CLONE_PTRACE on this clone */ | 24 | #define CLONE_UNTRACED 0x00800000 /* set if the tracing process can't force CLONE_PTRACE on this clone */ |
25 | #define CLONE_CHILD_SETTID 0x01000000 /* set the TID in the child */ | 25 | #define CLONE_CHILD_SETTID 0x01000000 /* set the TID in the child */ |
26 | #define CLONE_STOPPED 0x02000000 /* Start in stopped state */ | 26 | #define CLONE_STOPPED 0x02000000 /* Start in stopped state */ |
27 | #define CLONE_NEWUTS 0x04000000 /* New utsname group? */ | ||
27 | 28 | ||
28 | /* | 29 | /* |
29 | * Scheduling policies | 30 | * Scheduling policies |
diff --git a/include/linux/utsname.h b/include/linux/utsname.h index 99e522369f4f..02e4b6972064 100644 --- a/include/linux/utsname.h +++ b/include/linux/utsname.h | |||
@@ -47,6 +47,8 @@ static inline void get_uts_ns(struct uts_namespace *ns) | |||
47 | } | 47 | } |
48 | 48 | ||
49 | #ifdef CONFIG_UTS_NS | 49 | #ifdef CONFIG_UTS_NS |
50 | extern int unshare_utsname(unsigned long unshare_flags, | ||
51 | struct uts_namespace **new_uts); | ||
50 | extern int copy_utsname(int flags, struct task_struct *tsk); | 52 | extern int copy_utsname(int flags, struct task_struct *tsk); |
51 | extern void free_uts_ns(struct kref *kref); | 53 | extern void free_uts_ns(struct kref *kref); |
52 | 54 | ||
@@ -55,6 +57,15 @@ static inline void put_uts_ns(struct uts_namespace *ns) | |||
55 | kref_put(&ns->kref, free_uts_ns); | 57 | kref_put(&ns->kref, free_uts_ns); |
56 | } | 58 | } |
57 | #else | 59 | #else |
60 | static inline int unshare_utsname(unsigned long unshare_flags, | ||
61 | struct uts_namespace **new_uts) | ||
62 | { | ||
63 | if (unshare_flags & CLONE_NEWUTS) | ||
64 | return -EINVAL; | ||
65 | |||
66 | return 0; | ||
67 | } | ||
68 | |||
58 | static inline int copy_utsname(int flags, struct task_struct *tsk) | 69 | static inline int copy_utsname(int flags, struct task_struct *tsk) |
59 | { | 70 | { |
60 | return 0; | 71 | return 0; |