|
@@ -2380,8 +2380,8 @@ static int
|
|
|
pfm_bad_permissions(struct task_struct *task)
|
|
|
{
|
|
|
const struct cred *tcred;
|
|
|
- uid_t uid = current_uid();
|
|
|
- gid_t gid = current_gid();
|
|
|
+ kuid_t uid = current_uid();
|
|
|
+ kgid_t gid = current_gid();
|
|
|
int ret;
|
|
|
|
|
|
rcu_read_lock();
|
|
@@ -2389,20 +2389,20 @@ pfm_bad_permissions(struct task_struct *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,
|
|
|
- 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);
|
|
|
+ from_kuid(&init_user_ns, uid),
|
|
|
+ from_kgid(&init_user_ns, gid),
|
|
|
+ from_kuid(&init_user_ns, tcred->euid),
|
|
|
+ from_kuid(&init_user_ns, tcred->suid),
|
|
|
+ from_kuid(&init_user_ns, tcred->uid),
|
|
|
+ from_kgid(&init_user_ns, tcred->egid),
|
|
|
+ from_kgid(&init_user_ns, tcred->sgid)));
|
|
|
+
|
|
|
+ ret = ((!uid_eq(uid, tcred->euid))
|
|
|
+ || (!uid_eq(uid, tcred->suid))
|
|
|
+ || (!uid_eq(uid, tcred->uid))
|
|
|
+ || (!gid_eq(gid, tcred->egid))
|
|
|
+ || (!gid_eq(gid, tcred->sgid))
|
|
|
+ || (!gid_eq(gid, tcred->gid))) && !capable(CAP_SYS_PTRACE);
|
|
|
|
|
|
rcu_read_unlock();
|
|
|
return ret;
|