aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/user_namespace.h
diff options
context:
space:
mode:
authorCedric Le Goater <clg@fr.ibm.com>2007-07-16 02:40:59 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-16 12:05:47 -0400
commitacce292c82d4d82d35553b928df2b0597c3a9c78 (patch)
tree464288f40db9c254da214c400d0880ee50dc37f3 /include/linux/user_namespace.h
parent7d69a1f4a72b18876c99c697692b78339d491568 (diff)
user namespace: add the framework
Basically, it will allow a process to unshare its user_struct table, resetting at the same time its own user_struct and all the associated accounting. A new root user (uid == 0) is added to the user namespace upon creation. Such root users have full privileges and it seems that theses privileges should be controlled through some means (process capabilities ?) The unshare is not included in this patch. Changes since [try #4]: - Updated get_user_ns and put_user_ns to accept NULL, and get_user_ns to return the namespace. Changes since [try #3]: - moved struct user_namespace to files user_namespace.{c,h} Changes since [try #2]: - removed struct user_namespace* argument from find_user() Changes since [try #1]: - removed struct user_namespace* argument from find_user() - added a root_user per user namespace Signed-off-by: Cedric Le Goater <clg@fr.ibm.com> Signed-off-by: Serge E. Hallyn <serue@us.ibm.com> Acked-by: Pavel Emelianov <xemul@openvz.org> Cc: Herbert Poetzl <herbert@13thfloor.at> Cc: Kirill Korotaev <dev@sw.ru> Cc: Eric W. Biederman <ebiederm@xmission.com> Cc: Chris Wright <chrisw@sous-sol.org> Cc: Stephen Smalley <sds@tycho.nsa.gov> Cc: James Morris <jmorris@namei.org> Cc: Andrew Morgan <agm@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'include/linux/user_namespace.h')
-rw-r--r--include/linux/user_namespace.h57
1 files changed, 57 insertions, 0 deletions
diff --git a/include/linux/user_namespace.h b/include/linux/user_namespace.h
new file mode 100644
index 000000000000..92a45867ecfb
--- /dev/null
+++ b/include/linux/user_namespace.h
@@ -0,0 +1,57 @@
1#ifndef _LINUX_USER_NAMESPACE_H
2#define _LINUX_USER_NAMESPACE_H
3
4#include <linux/kref.h>
5#include <linux/nsproxy.h>
6#include <linux/sched.h>
7
8#define UIDHASH_BITS (CONFIG_BASE_SMALL ? 3 : 8)
9#define UIDHASH_SZ (1 << UIDHASH_BITS)
10
11struct user_namespace {
12 struct kref kref;
13 struct list_head uidhash_table[UIDHASH_SZ];
14 struct user_struct *root_user;
15};
16
17extern struct user_namespace init_user_ns;
18
19#ifdef CONFIG_USER_NS
20
21static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
22{
23 if (ns)
24 kref_get(&ns->kref);
25 return ns;
26}
27
28extern struct user_namespace *copy_user_ns(int flags,
29 struct user_namespace *old_ns);
30extern void free_user_ns(struct kref *kref);
31
32static inline void put_user_ns(struct user_namespace *ns)
33{
34 if (ns)
35 kref_put(&ns->kref, free_user_ns);
36}
37
38#else
39
40static inline struct user_namespace *get_user_ns(struct user_namespace *ns)
41{
42 return &init_user_ns;
43}
44
45static inline struct user_namespace *copy_user_ns(int flags,
46 struct user_namespace *old_ns)
47{
48 return NULL;
49}
50
51static inline void put_user_ns(struct user_namespace *ns)
52{
53}
54
55#endif
56
57#endif /* _LINUX_USER_H */