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); |
