aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/sys.c
diff options
context:
space:
mode:
authorEric W. Biederman <ebiederm@xmission.com>2012-03-03 23:21:47 -0500
committerEric W. Biederman <ebiederm@xmission.com>2012-05-03 06:28:51 -0400
commit5af662030e5db1a5560fd917250d5d688a6be586 (patch)
treec648c0bf8afe4571cf13b098bd6e24fbce86789c /kernel/sys.c
parenta29c33f4e506e1dae7e0985b6328046535becbf8 (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.c18
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;