Root/
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 | #include <linux/err.h> |
8 | |
9 | #define UID_GID_MAP_MAX_EXTENTS 5 |
10 | |
11 | struct uid_gid_map { /* 64 bytes -- 1 cache line */ |
12 | u32 nr_extents; |
13 | struct uid_gid_extent { |
14 | u32 first; |
15 | u32 lower_first; |
16 | u32 count; |
17 | } extent[UID_GID_MAP_MAX_EXTENTS]; |
18 | }; |
19 | |
20 | struct user_namespace { |
21 | struct uid_gid_map uid_map; |
22 | struct uid_gid_map gid_map; |
23 | struct uid_gid_map projid_map; |
24 | atomic_t count; |
25 | struct user_namespace *parent; |
26 | int level; |
27 | kuid_t owner; |
28 | kgid_t group; |
29 | unsigned int proc_inum; |
30 | }; |
31 | |
32 | extern struct user_namespace init_user_ns; |
33 | |
34 | #ifdef CONFIG_USER_NS |
35 | |
36 | static inline struct user_namespace *get_user_ns(struct user_namespace *ns) |
37 | { |
38 | if (ns) |
39 | atomic_inc(&ns->count); |
40 | return ns; |
41 | } |
42 | |
43 | extern int create_user_ns(struct cred *new); |
44 | extern int unshare_userns(unsigned long unshare_flags, struct cred **new_cred); |
45 | extern void free_user_ns(struct user_namespace *ns); |
46 | |
47 | static inline void put_user_ns(struct user_namespace *ns) |
48 | { |
49 | if (ns && atomic_dec_and_test(&ns->count)) |
50 | free_user_ns(ns); |
51 | } |
52 | |
53 | struct seq_operations; |
54 | extern struct seq_operations proc_uid_seq_operations; |
55 | extern struct seq_operations proc_gid_seq_operations; |
56 | extern struct seq_operations proc_projid_seq_operations; |
57 | extern ssize_t proc_uid_map_write(struct file *, const char __user *, size_t, loff_t *); |
58 | extern ssize_t proc_gid_map_write(struct file *, const char __user *, size_t, loff_t *); |
59 | extern ssize_t proc_projid_map_write(struct file *, const char __user *, size_t, loff_t *); |
60 | #else |
61 | |
62 | static inline struct user_namespace *get_user_ns(struct user_namespace *ns) |
63 | { |
64 | return &init_user_ns; |
65 | } |
66 | |
67 | static inline int create_user_ns(struct cred *new) |
68 | { |
69 | return -EINVAL; |
70 | } |
71 | |
72 | static inline int unshare_userns(unsigned long unshare_flags, |
73 | struct cred **new_cred) |
74 | { |
75 | if (unshare_flags & CLONE_NEWUSER) |
76 | return -EINVAL; |
77 | return 0; |
78 | } |
79 | |
80 | static inline void put_user_ns(struct user_namespace *ns) |
81 | { |
82 | } |
83 | |
84 | #endif |
85 | |
86 | #endif /* _LINUX_USER_H */ |
87 |
Branches:
ben-wpan
ben-wpan-stefan
javiroman/ks7010
jz-2.6.34
jz-2.6.34-rc5
jz-2.6.34-rc6
jz-2.6.34-rc7
jz-2.6.35
jz-2.6.36
jz-2.6.37
jz-2.6.38
jz-2.6.39
jz-3.0
jz-3.1
jz-3.11
jz-3.12
jz-3.13
jz-3.15
jz-3.16
jz-3.18-dt
jz-3.2
jz-3.3
jz-3.4
jz-3.5
jz-3.6
jz-3.6-rc2-pwm
jz-3.9
jz-3.9-clk
jz-3.9-rc8
jz47xx
jz47xx-2.6.38
master
Tags:
od-2011-09-04
od-2011-09-18
v2.6.34-rc5
v2.6.34-rc6
v2.6.34-rc7
v3.9