diff options
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; |