diff options
Diffstat (limited to 'kernel/ptrace.c')
| -rw-r--r-- | kernel/ptrace.c | 15 |
1 files changed, 7 insertions, 8 deletions
diff --git a/kernel/ptrace.c b/kernel/ptrace.c index ee8d49b9c309..a232bb59d93f 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c | |||
| @@ -198,15 +198,14 @@ int __ptrace_may_access(struct task_struct *task, unsigned int mode) | |||
| 198 | return 0; | 198 | return 0; |
| 199 | rcu_read_lock(); | 199 | rcu_read_lock(); |
| 200 | tcred = __task_cred(task); | 200 | tcred = __task_cred(task); |
| 201 | if (cred->user->user_ns == tcred->user->user_ns && | 201 | if (uid_eq(cred->uid, tcred->euid) && |
| 202 | (cred->uid == tcred->euid && | 202 | uid_eq(cred->uid, tcred->suid) && |
| 203 | cred->uid == tcred->suid && | 203 | uid_eq(cred->uid, tcred->uid) && |
| 204 | cred->uid == tcred->uid && | 204 | gid_eq(cred->gid, tcred->egid) && |
| 205 | cred->gid == tcred->egid && | 205 | gid_eq(cred->gid, tcred->sgid) && |
| 206 | cred->gid == tcred->sgid && | 206 | gid_eq(cred->gid, tcred->gid)) |
| 207 | cred->gid == tcred->gid)) | ||
| 208 | goto ok; | 207 | goto ok; |
| 209 | if (ptrace_has_cap(tcred->user->user_ns, mode)) | 208 | if (ptrace_has_cap(tcred->user_ns, mode)) |
| 210 | goto ok; | 209 | goto ok; |
| 211 | rcu_read_unlock(); | 210 | rcu_read_unlock(); |
| 212 | return -EPERM; | 211 | return -EPERM; |
