]> git.proxmox.com Git - mirror_ubuntu-eoan-kernel.git/blobdiff - arch/ia64/kernel/perfmon.c
CRED: Use RCU to access another task's creds and to release a task's own creds
[mirror_ubuntu-eoan-kernel.git] / arch / ia64 / kernel / perfmon.c
index dd38db46a77a46fd58ecc92291408141373885fd..0e499757309bfbdab35d1233126e4259d9f42bdd 100644 (file)
@@ -2399,25 +2399,33 @@ error_kmem:
 static int
 pfm_bad_permissions(struct task_struct *task)
 {
+       const struct cred *tcred;
        uid_t uid = current_uid();
        gid_t gid = current_gid();
+       int ret;
+
+       rcu_read_lock();
+       tcred = __task_cred(task);
 
        /* inspired by ptrace_attach() */
        DPRINT(("cur: uid=%d gid=%d task: euid=%d suid=%d uid=%d egid=%d sgid=%d\n",
                uid,
                gid,
-               task->euid,
-               task->suid,
-               task->uid,
-               task->egid,
-               task->sgid));
-
-       return (uid != task->euid)
-           || (uid != task->suid)
-           || (uid != task->uid)
-           || (gid != task->egid)
-           || (gid != task->sgid)
-           || (gid != task->gid)) && !capable(CAP_SYS_PTRACE);
+               tcred->euid,
+               tcred->suid,
+               tcred->uid,
+               tcred->egid,
+               tcred->sgid));
+
+       ret = ((uid != tcred->euid)
+              || (uid != tcred->suid)
+              || (uid != tcred->uid)
+              || (gid != tcred->egid)
+              || (gid != tcred->sgid)
+              || (gid != tcred->gid)) && !capable(CAP_SYS_PTRACE);
+
+       rcu_read_unlock();
+       return ret;
 }
 
 static int