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/sys.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/sys.c')
-rw-r--r-- | kernel/sys.c | 18 |
1 files changed, 8 insertions, 10 deletions
diff --git a/kernel/sys.c b/kernel/sys.c index aff09f208eb3..f484077b6b14 100644 --- a/kernel/sys.c +++ b/kernel/sys.c | |||
@@ -131,9 +131,8 @@ static bool set_one_prio_perm(struct task_struct *p) | |||
131 | { | 131 | { |
132 | const struct cred *cred = current_cred(), *pcred = __task_cred(p); | 132 | const struct cred *cred = current_cred(), *pcred = __task_cred(p); |
133 | 133 | ||
134 | if (pcred->user_ns == cred->user_ns && | 134 | if (uid_eq(pcred->uid, cred->euid) || |
135 | (pcred->uid == cred->euid || | 135 | uid_eq(pcred->euid, cred->euid)) |
136 | pcred->euid == cred->euid)) | ||
137 | return true; | 136 | return true; |
138 | if (ns_capable(pcred->user_ns, CAP_SYS_NICE)) | 137 | if (ns_capable(pcred->user_ns, CAP_SYS_NICE)) |
139 | return true; | 138 | return true; |
@@ -1582,13 +1581,12 @@ static int check_prlimit_permission(struct task_struct *task) | |||
1582 | return 0; | 1581 | return 0; |
1583 | 1582 | ||
1584 | tcred = __task_cred(task); | 1583 | tcred = __task_cred(task); |
1585 | if (cred->user_ns == tcred->user_ns && | 1584 | if (uid_eq(cred->uid, tcred->euid) && |
1586 | (cred->uid == tcred->euid && | 1585 | uid_eq(cred->uid, tcred->suid) && |
1587 | cred->uid == tcred->suid && | 1586 | uid_eq(cred->uid, tcred->uid) && |
1588 | cred->uid == tcred->uid && | 1587 | gid_eq(cred->gid, tcred->egid) && |
1589 | cred->gid == tcred->egid && | 1588 | gid_eq(cred->gid, tcred->sgid) && |
1590 | cred->gid == tcred->sgid && | 1589 | gid_eq(cred->gid, tcred->gid)) |
1591 | cred->gid == tcred->gid)) | ||
1592 | return 0; | 1590 | return 0; |
1593 | if (ns_capable(tcred->user_ns, CAP_SYS_RESOURCE)) | 1591 | if (ns_capable(tcred->user_ns, CAP_SYS_RESOURCE)) |
1594 | return 0; | 1592 | return 0; |