diff options
Diffstat (limited to 'include/linux')
-rw-r--r-- | include/linux/mount.h | 9 | ||||
-rw-r--r-- | include/linux/nsproxy.h | 16 | ||||
-rw-r--r-- | include/linux/pid_namespace.h | 1 |
3 files changed, 15 insertions, 11 deletions
diff --git a/include/linux/mount.h b/include/linux/mount.h index 839bac270904..b0c1e6574e7f 100644 --- a/include/linux/mount.h +++ b/include/linux/mount.h | |||
@@ -42,13 +42,20 @@ struct mnt_namespace; | |||
42 | * flag, consider how it interacts with shared mounts. | 42 | * flag, consider how it interacts with shared mounts. |
43 | */ | 43 | */ |
44 | #define MNT_SHARED_MASK (MNT_UNBINDABLE) | 44 | #define MNT_SHARED_MASK (MNT_UNBINDABLE) |
45 | #define MNT_PROPAGATION_MASK (MNT_SHARED | MNT_UNBINDABLE) | 45 | #define MNT_USER_SETTABLE_MASK (MNT_NOSUID | MNT_NODEV | MNT_NOEXEC \ |
46 | | MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME \ | ||
47 | | MNT_READONLY) | ||
48 | #define MNT_ATIME_MASK (MNT_NOATIME | MNT_NODIRATIME | MNT_RELATIME ) | ||
46 | 49 | ||
47 | #define MNT_INTERNAL_FLAGS (MNT_SHARED | MNT_WRITE_HOLD | MNT_INTERNAL | \ | 50 | #define MNT_INTERNAL_FLAGS (MNT_SHARED | MNT_WRITE_HOLD | MNT_INTERNAL | \ |
48 | MNT_DOOMED | MNT_SYNC_UMOUNT | MNT_MARKED) | 51 | MNT_DOOMED | MNT_SYNC_UMOUNT | MNT_MARKED) |
49 | 52 | ||
50 | #define MNT_INTERNAL 0x4000 | 53 | #define MNT_INTERNAL 0x4000 |
51 | 54 | ||
55 | #define MNT_LOCK_ATIME 0x040000 | ||
56 | #define MNT_LOCK_NOEXEC 0x080000 | ||
57 | #define MNT_LOCK_NOSUID 0x100000 | ||
58 | #define MNT_LOCK_NODEV 0x200000 | ||
52 | #define MNT_LOCK_READONLY 0x400000 | 59 | #define MNT_LOCK_READONLY 0x400000 |
53 | #define MNT_LOCKED 0x800000 | 60 | #define MNT_LOCKED 0x800000 |
54 | #define MNT_DOOMED 0x1000000 | 61 | #define MNT_DOOMED 0x1000000 |
diff --git a/include/linux/nsproxy.h b/include/linux/nsproxy.h index b4ec59d159ac..35fa08fd7739 100644 --- a/include/linux/nsproxy.h +++ b/include/linux/nsproxy.h | |||
@@ -40,32 +40,28 @@ extern struct nsproxy init_nsproxy; | |||
40 | * the namespaces access rules are: | 40 | * the namespaces access rules are: |
41 | * | 41 | * |
42 | * 1. only current task is allowed to change tsk->nsproxy pointer or | 42 | * 1. only current task is allowed to change tsk->nsproxy pointer or |
43 | * any pointer on the nsproxy itself | 43 | * any pointer on the nsproxy itself. Current must hold the task_lock |
44 | * when changing tsk->nsproxy. | ||
44 | * | 45 | * |
45 | * 2. when accessing (i.e. reading) current task's namespaces - no | 46 | * 2. when accessing (i.e. reading) current task's namespaces - no |
46 | * precautions should be taken - just dereference the pointers | 47 | * precautions should be taken - just dereference the pointers |
47 | * | 48 | * |
48 | * 3. the access to other task namespaces is performed like this | 49 | * 3. the access to other task namespaces is performed like this |
49 | * rcu_read_lock(); | 50 | * task_lock(task); |
50 | * nsproxy = task_nsproxy(tsk); | 51 | * nsproxy = task->nsproxy; |
51 | * if (nsproxy != NULL) { | 52 | * if (nsproxy != NULL) { |
52 | * / * | 53 | * / * |
53 | * * work with the namespaces here | 54 | * * work with the namespaces here |
54 | * * e.g. get the reference on one of them | 55 | * * e.g. get the reference on one of them |
55 | * * / | 56 | * * / |
56 | * } / * | 57 | * } / * |
57 | * * NULL task_nsproxy() means that this task is | 58 | * * NULL task->nsproxy means that this task is |
58 | * * almost dead (zombie) | 59 | * * almost dead (zombie) |
59 | * * / | 60 | * * / |
60 | * rcu_read_unlock(); | 61 | * task_unlock(task); |
61 | * | 62 | * |
62 | */ | 63 | */ |
63 | 64 | ||
64 | static inline struct nsproxy *task_nsproxy(struct task_struct *tsk) | ||
65 | { | ||
66 | return rcu_dereference(tsk->nsproxy); | ||
67 | } | ||
68 | |||
69 | int copy_namespaces(unsigned long flags, struct task_struct *tsk); | 65 | int copy_namespaces(unsigned long flags, struct task_struct *tsk); |
70 | void exit_task_namespaces(struct task_struct *tsk); | 66 | void exit_task_namespaces(struct task_struct *tsk); |
71 | void switch_task_namespaces(struct task_struct *tsk, struct nsproxy *new); | 67 | void switch_task_namespaces(struct task_struct *tsk, struct nsproxy *new); |
diff --git a/include/linux/pid_namespace.h b/include/linux/pid_namespace.h index 7246ef3d4455..1997ffc295a7 100644 --- a/include/linux/pid_namespace.h +++ b/include/linux/pid_namespace.h | |||
@@ -33,6 +33,7 @@ struct pid_namespace { | |||
33 | #ifdef CONFIG_PROC_FS | 33 | #ifdef CONFIG_PROC_FS |
34 | struct vfsmount *proc_mnt; | 34 | struct vfsmount *proc_mnt; |
35 | struct dentry *proc_self; | 35 | struct dentry *proc_self; |
36 | struct dentry *proc_thread_self; | ||
36 | #endif | 37 | #endif |
37 | #ifdef CONFIG_BSD_PROCESS_ACCT | 38 | #ifdef CONFIG_BSD_PROCESS_ACCT |
38 | struct bsd_acct_struct *bacct; | 39 | struct bsd_acct_struct *bacct; |