diff options
Diffstat (limited to 'kernel/capability.c')
-rw-r--r-- | kernel/capability.c | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/kernel/capability.c b/kernel/capability.c index f02ad47320b9..d4377c5a36c9 100644 --- a/kernel/capability.c +++ b/kernel/capability.c | |||
@@ -62,8 +62,9 @@ asmlinkage long sys_capget(cap_user_header_t header, cap_user_data_t dataptr) | |||
62 | spin_lock(&task_capability_lock); | 62 | spin_lock(&task_capability_lock); |
63 | read_lock(&tasklist_lock); | 63 | read_lock(&tasklist_lock); |
64 | 64 | ||
65 | if (pid && pid != current->pid) { | 65 | if (pid && pid != task_pid_vnr(current)) { |
66 | target = find_task_by_pid(pid); | 66 | target = find_task_by_pid_ns(pid, |
67 | current->nsproxy->pid_ns); | ||
67 | if (!target) { | 68 | if (!target) { |
68 | ret = -ESRCH; | 69 | ret = -ESRCH; |
69 | goto out; | 70 | goto out; |
@@ -96,7 +97,7 @@ static inline int cap_set_pg(int pgrp_nr, kernel_cap_t *effective, | |||
96 | int found = 0; | 97 | int found = 0; |
97 | struct pid *pgrp; | 98 | struct pid *pgrp; |
98 | 99 | ||
99 | pgrp = find_pid(pgrp_nr); | 100 | pgrp = find_pid_ns(pgrp_nr, current->nsproxy->pid_ns); |
100 | do_each_pid_task(pgrp, PIDTYPE_PGID, g) { | 101 | do_each_pid_task(pgrp, PIDTYPE_PGID, g) { |
101 | target = g; | 102 | target = g; |
102 | while_each_thread(g, target) { | 103 | while_each_thread(g, target) { |
@@ -185,7 +186,7 @@ asmlinkage long sys_capset(cap_user_header_t header, const cap_user_data_t data) | |||
185 | if (get_user(pid, &header->pid)) | 186 | if (get_user(pid, &header->pid)) |
186 | return -EFAULT; | 187 | return -EFAULT; |
187 | 188 | ||
188 | if (pid && pid != current->pid && !capable(CAP_SETPCAP)) | 189 | if (pid && pid != task_pid_vnr(current) && !capable(CAP_SETPCAP)) |
189 | return -EPERM; | 190 | return -EPERM; |
190 | 191 | ||
191 | if (copy_from_user(&effective, &data->effective, sizeof(effective)) || | 192 | if (copy_from_user(&effective, &data->effective, sizeof(effective)) || |
@@ -196,8 +197,9 @@ asmlinkage long sys_capset(cap_user_header_t header, const cap_user_data_t data) | |||
196 | spin_lock(&task_capability_lock); | 197 | spin_lock(&task_capability_lock); |
197 | read_lock(&tasklist_lock); | 198 | read_lock(&tasklist_lock); |
198 | 199 | ||
199 | if (pid > 0 && pid != current->pid) { | 200 | if (pid > 0 && pid != task_pid_vnr(current)) { |
200 | target = find_task_by_pid(pid); | 201 | target = find_task_by_pid_ns(pid, |
202 | current->nsproxy->pid_ns); | ||
201 | if (!target) { | 203 | if (!target) { |
202 | ret = -ESRCH; | 204 | ret = -ESRCH; |
203 | goto out; | 205 | goto out; |