diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2012-03-03 23:21:47 -0500 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2012-05-03 06:28:51 -0400 |
commit | 5af662030e5db1a5560fd917250d5d688a6be586 (patch) | |
tree | c648c0bf8afe4571cf13b098bd6e24fbce86789c /kernel/signal.c | |
parent | a29c33f4e506e1dae7e0985b6328046535becbf8 (diff) |
userns: Convert ptrace, kill, set_priority permission checks to work with kuids and kgids
Update the permission checks to use the new uid_eq and gid_eq helpers
and remove the now unnecessary user_ns equality comparison.
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Diffstat (limited to 'kernel/signal.c')
-rw-r--r-- | kernel/signal.c | 15 |
1 files changed, 6 insertions, 9 deletions
diff --git a/kernel/signal.c b/kernel/signal.c index d6303277a640..aef629c65c87 100644 --- a/kernel/signal.c +++ b/kernel/signal.c | |||
@@ -767,11 +767,10 @@ static int kill_ok_by_cred(struct task_struct *t) | |||
767 | const struct cred *cred = current_cred(); | 767 | const struct cred *cred = current_cred(); |
768 | const struct cred *tcred = __task_cred(t); | 768 | const struct cred *tcred = __task_cred(t); |
769 | 769 | ||
770 | if (cred->user_ns == tcred->user_ns && | 770 | if (uid_eq(cred->euid, tcred->suid) || |
771 | (cred->euid == tcred->suid || | 771 | uid_eq(cred->euid, tcred->uid) || |
772 | cred->euid == tcred->uid || | 772 | uid_eq(cred->uid, tcred->suid) || |
773 | cred->uid == tcred->suid || | 773 | uid_eq(cred->uid, tcred->uid)) |
774 | cred->uid == tcred->uid)) | ||
775 | return 1; | 774 | return 1; |
776 | 775 | ||
777 | if (ns_capable(tcred->user_ns, CAP_KILL)) | 776 | if (ns_capable(tcred->user_ns, CAP_KILL)) |
@@ -1389,10 +1388,8 @@ static int kill_as_cred_perm(const struct cred *cred, | |||
1389 | struct task_struct *target) | 1388 | struct task_struct *target) |
1390 | { | 1389 | { |
1391 | const struct cred *pcred = __task_cred(target); | 1390 | const struct cred *pcred = __task_cred(target); |
1392 | if (cred->user_ns != pcred->user_ns) | 1391 | if (!uid_eq(cred->euid, pcred->suid) && !uid_eq(cred->euid, pcred->uid) && |
1393 | return 0; | 1392 | !uid_eq(cred->uid, pcred->suid) && !uid_eq(cred->uid, pcred->uid)) |
1394 | if (cred->euid != pcred->suid && cred->euid != pcred->uid && | ||
1395 | cred->uid != pcred->suid && cred->uid != pcred->uid) | ||
1396 | return 0; | 1393 | return 0; |
1397 | return 1; | 1394 | return 1; |
1398 | } | 1395 | } |