diff options
| author | Eric W. Biederman <ebiederm@xmission.com> | 2010-03-07 21:48:39 -0500 |
|---|---|---|
| committer | Eric W. Biederman <ebiederm@xmission.com> | 2011-05-10 17:35:47 -0400 |
| commit | a00eaf11a223c63fbb212369d6db69ce4c55a2d1 (patch) | |
| tree | 1c38d8591c229243cb09386a0f5b3737da421cf1 /ipc | |
| parent | 34482e89a5218f0f9317abf1cfba3bb38b5c29dd (diff) | |
ns proc: Add support for the ipc namespace
Acked-by: Daniel Lezcano <daniel.lezcano@free.fr>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Diffstat (limited to 'ipc')
| -rw-r--r-- | ipc/namespace.c | 37 |
1 files changed, 37 insertions, 0 deletions
diff --git a/ipc/namespace.c b/ipc/namespace.c index 8054c8e5faf1..ce0a647869b1 100644 --- a/ipc/namespace.c +++ b/ipc/namespace.c | |||
| @@ -12,6 +12,7 @@ | |||
| 12 | #include <linux/fs.h> | 12 | #include <linux/fs.h> |
| 13 | #include <linux/mount.h> | 13 | #include <linux/mount.h> |
| 14 | #include <linux/user_namespace.h> | 14 | #include <linux/user_namespace.h> |
| 15 | #include <linux/proc_fs.h> | ||
| 15 | 16 | ||
| 16 | #include "util.h" | 17 | #include "util.h" |
| 17 | 18 | ||
| @@ -140,3 +141,39 @@ void put_ipc_ns(struct ipc_namespace *ns) | |||
| 140 | free_ipc_ns(ns); | 141 | free_ipc_ns(ns); |
| 141 | } | 142 | } |
| 142 | } | 143 | } |
| 144 | |||
| 145 | static void *ipcns_get(struct task_struct *task) | ||
| 146 | { | ||
| 147 | struct ipc_namespace *ns = NULL; | ||
| 148 | struct nsproxy *nsproxy; | ||
| 149 | |||
| 150 | rcu_read_lock(); | ||
| 151 | nsproxy = task_nsproxy(task); | ||
| 152 | if (nsproxy) | ||
| 153 | ns = get_ipc_ns(nsproxy->ipc_ns); | ||
| 154 | rcu_read_unlock(); | ||
| 155 | |||
| 156 | return ns; | ||
| 157 | } | ||
| 158 | |||
| 159 | static void ipcns_put(void *ns) | ||
| 160 | { | ||
| 161 | return put_ipc_ns(ns); | ||
| 162 | } | ||
| 163 | |||
| 164 | static int ipcns_install(struct nsproxy *nsproxy, void *ns) | ||
| 165 | { | ||
| 166 | /* Ditch state from the old ipc namespace */ | ||
| 167 | exit_sem(current); | ||
| 168 | put_ipc_ns(nsproxy->ipc_ns); | ||
| 169 | nsproxy->ipc_ns = get_ipc_ns(ns); | ||
| 170 | return 0; | ||
| 171 | } | ||
| 172 | |||
| 173 | const struct proc_ns_operations ipcns_operations = { | ||
| 174 | .name = "ipc", | ||
| 175 | .type = CLONE_NEWIPC, | ||
| 176 | .get = ipcns_get, | ||
| 177 | .put = ipcns_put, | ||
| 178 | .install = ipcns_install, | ||
| 179 | }; | ||
