const unsigned long __user *old_nodes,
const unsigned long __user *new_nodes)
{
+ struct cred *cred, *tcred;
struct mm_struct *mm;
struct task_struct *task;
nodemask_t old;
nodemask_t new;
nodemask_t task_nodes;
- uid_t uid, euid;
int err;
err = get_nodes(&old, old_nodes, maxnode);
* capabilities, superuser privileges or the same
* userid as the target process.
*/
- uid = current_uid();
- euid = current_euid();
- if (euid != task->suid && euid != task->uid &&
- uid != task->suid && uid != task->uid &&
+ cred = current->cred;
+ tcred = task->cred;
+ if (cred->euid != tcred->suid && cred->euid != tcred->uid &&
+ cred->uid != tcred->suid && cred->uid != tcred->uid &&
!capable(CAP_SYS_NICE)) {
err = -EPERM;
goto out;