diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2014-11-01 02:32:53 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2014-12-04 14:34:47 -0500 |
commit | 33c429405a2c8d9e42afb9fee88a63cfb2de1e98 (patch) | |
tree | d2ffe096cd36852049b844c8befd1ba0ba6cf18c /kernel | |
parent | 6344c433a452b1a05d03a61a6a85d89f793bb7b8 (diff) |
copy address of proc_ns_ops into ns_common
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/nsproxy.c | 8 | ||||
-rw-r--r-- | kernel/pid.c | 3 | ||||
-rw-r--r-- | kernel/pid_namespace.c | 1 | ||||
-rw-r--r-- | kernel/user.c | 3 | ||||
-rw-r--r-- | kernel/user_namespace.c | 1 | ||||
-rw-r--r-- | kernel/utsname.c | 2 |
6 files changed, 14 insertions, 4 deletions
diff --git a/kernel/nsproxy.c b/kernel/nsproxy.c index ef42d0ab3115..87c37221cb7f 100644 --- a/kernel/nsproxy.c +++ b/kernel/nsproxy.c | |||
@@ -220,11 +220,11 @@ void exit_task_namespaces(struct task_struct *p) | |||
220 | 220 | ||
221 | SYSCALL_DEFINE2(setns, int, fd, int, nstype) | 221 | SYSCALL_DEFINE2(setns, int, fd, int, nstype) |
222 | { | 222 | { |
223 | const struct proc_ns_operations *ops; | ||
224 | struct task_struct *tsk = current; | 223 | struct task_struct *tsk = current; |
225 | struct nsproxy *new_nsproxy; | 224 | struct nsproxy *new_nsproxy; |
226 | struct proc_ns *ei; | 225 | struct proc_ns *ei; |
227 | struct file *file; | 226 | struct file *file; |
227 | struct ns_common *ns; | ||
228 | int err; | 228 | int err; |
229 | 229 | ||
230 | file = proc_ns_fget(fd); | 230 | file = proc_ns_fget(fd); |
@@ -233,8 +233,8 @@ SYSCALL_DEFINE2(setns, int, fd, int, nstype) | |||
233 | 233 | ||
234 | err = -EINVAL; | 234 | err = -EINVAL; |
235 | ei = get_proc_ns(file_inode(file)); | 235 | ei = get_proc_ns(file_inode(file)); |
236 | ops = ei->ns_ops; | 236 | ns = ei->ns; |
237 | if (nstype && (ops->type != nstype)) | 237 | if (nstype && (ns->ops->type != nstype)) |
238 | goto out; | 238 | goto out; |
239 | 239 | ||
240 | new_nsproxy = create_new_namespaces(0, tsk, current_user_ns(), tsk->fs); | 240 | new_nsproxy = create_new_namespaces(0, tsk, current_user_ns(), tsk->fs); |
@@ -243,7 +243,7 @@ SYSCALL_DEFINE2(setns, int, fd, int, nstype) | |||
243 | goto out; | 243 | goto out; |
244 | } | 244 | } |
245 | 245 | ||
246 | err = ops->install(new_nsproxy, ei->ns); | 246 | err = ns->ops->install(new_nsproxy, ns); |
247 | if (err) { | 247 | if (err) { |
248 | free_nsproxy(new_nsproxy); | 248 | free_nsproxy(new_nsproxy); |
249 | goto out; | 249 | goto out; |
diff --git a/kernel/pid.c b/kernel/pid.c index 3650698cf1dc..c17a993a4d2a 100644 --- a/kernel/pid.c +++ b/kernel/pid.c | |||
@@ -80,6 +80,9 @@ struct pid_namespace init_pid_ns = { | |||
80 | .child_reaper = &init_task, | 80 | .child_reaper = &init_task, |
81 | .user_ns = &init_user_ns, | 81 | .user_ns = &init_user_ns, |
82 | .ns.inum = PROC_PID_INIT_INO, | 82 | .ns.inum = PROC_PID_INIT_INO, |
83 | #ifdef CONFIG_PID_NS | ||
84 | .ns.ops = &pidns_operations, | ||
85 | #endif | ||
83 | }; | 86 | }; |
84 | EXPORT_SYMBOL_GPL(init_pid_ns); | 87 | EXPORT_SYMBOL_GPL(init_pid_ns); |
85 | 88 | ||
diff --git a/kernel/pid_namespace.c b/kernel/pid_namespace.c index 5aa9158a84d5..e1bafe3b47bb 100644 --- a/kernel/pid_namespace.c +++ b/kernel/pid_namespace.c | |||
@@ -108,6 +108,7 @@ static struct pid_namespace *create_pid_namespace(struct user_namespace *user_ns | |||
108 | err = ns_alloc_inum(&ns->ns); | 108 | err = ns_alloc_inum(&ns->ns); |
109 | if (err) | 109 | if (err) |
110 | goto out_free_map; | 110 | goto out_free_map; |
111 | ns->ns.ops = &pidns_operations; | ||
111 | 112 | ||
112 | kref_init(&ns->kref); | 113 | kref_init(&ns->kref); |
113 | ns->level = level; | 114 | ns->level = level; |
diff --git a/kernel/user.c b/kernel/user.c index a7ca84bad8e6..69b800aebf13 100644 --- a/kernel/user.c +++ b/kernel/user.c | |||
@@ -51,6 +51,9 @@ struct user_namespace init_user_ns = { | |||
51 | .owner = GLOBAL_ROOT_UID, | 51 | .owner = GLOBAL_ROOT_UID, |
52 | .group = GLOBAL_ROOT_GID, | 52 | .group = GLOBAL_ROOT_GID, |
53 | .ns.inum = PROC_USER_INIT_INO, | 53 | .ns.inum = PROC_USER_INIT_INO, |
54 | #ifdef CONFIG_USER_NS | ||
55 | .ns.ops = &userns_operations, | ||
56 | #endif | ||
54 | #ifdef CONFIG_PERSISTENT_KEYRINGS | 57 | #ifdef CONFIG_PERSISTENT_KEYRINGS |
55 | .persistent_keyring_register_sem = | 58 | .persistent_keyring_register_sem = |
56 | __RWSEM_INITIALIZER(init_user_ns.persistent_keyring_register_sem), | 59 | __RWSEM_INITIALIZER(init_user_ns.persistent_keyring_register_sem), |
diff --git a/kernel/user_namespace.c b/kernel/user_namespace.c index 6bf8177768e5..1491ad00388f 100644 --- a/kernel/user_namespace.c +++ b/kernel/user_namespace.c | |||
@@ -91,6 +91,7 @@ int create_user_ns(struct cred *new) | |||
91 | kmem_cache_free(user_ns_cachep, ns); | 91 | kmem_cache_free(user_ns_cachep, ns); |
92 | return ret; | 92 | return ret; |
93 | } | 93 | } |
94 | ns->ns.ops = &userns_operations; | ||
94 | 95 | ||
95 | atomic_set(&ns->count, 1); | 96 | atomic_set(&ns->count, 1); |
96 | /* Leave the new->user_ns reference with the new user namespace. */ | 97 | /* Leave the new->user_ns reference with the new user namespace. */ |
diff --git a/kernel/utsname.c b/kernel/utsname.c index c2a2b321d88a..831ea7108232 100644 --- a/kernel/utsname.c +++ b/kernel/utsname.c | |||
@@ -48,6 +48,8 @@ static struct uts_namespace *clone_uts_ns(struct user_namespace *user_ns, | |||
48 | return ERR_PTR(err); | 48 | return ERR_PTR(err); |
49 | } | 49 | } |
50 | 50 | ||
51 | ns->ns.ops = &utsns_operations; | ||
52 | |||
51 | down_read(&uts_sem); | 53 | down_read(&uts_sem); |
52 | memcpy(&ns->name, &old_ns->name, sizeof(ns->name)); | 54 | memcpy(&ns->name, &old_ns->name, sizeof(ns->name)); |
53 | ns->user_ns = get_user_ns(user_ns); | 55 | ns->user_ns = get_user_ns(user_ns); |