|
@@ -346,33 +346,6 @@ static int proc_root_link(struct inode *inode, struct dentry **dentry, struct vf
|
|
|
(task->state == TASK_STOPPED || task->state == TASK_TRACED) && \
|
|
|
security_ptrace(current,task) == 0))
|
|
|
|
|
|
-static int may_ptrace_attach(struct task_struct *task)
|
|
|
-{
|
|
|
- int retval = 0;
|
|
|
-
|
|
|
- task_lock(task);
|
|
|
-
|
|
|
- if (!task->mm)
|
|
|
- goto out;
|
|
|
- if (((current->uid != task->euid) ||
|
|
|
- (current->uid != task->suid) ||
|
|
|
- (current->uid != task->uid) ||
|
|
|
- (current->gid != task->egid) ||
|
|
|
- (current->gid != task->sgid) ||
|
|
|
- (current->gid != task->gid)) && !capable(CAP_SYS_PTRACE))
|
|
|
- goto out;
|
|
|
- rmb();
|
|
|
- if (task->mm->dumpable != 1 && !capable(CAP_SYS_PTRACE))
|
|
|
- goto out;
|
|
|
- if (security_ptrace(current, task))
|
|
|
- goto out;
|
|
|
-
|
|
|
- retval = 1;
|
|
|
-out:
|
|
|
- task_unlock(task);
|
|
|
- return retval;
|
|
|
-}
|
|
|
-
|
|
|
static int proc_pid_environ(struct task_struct *task, char * buffer)
|
|
|
{
|
|
|
int res = 0;
|
|
@@ -382,7 +355,7 @@ static int proc_pid_environ(struct task_struct *task, char * buffer)
|
|
|
if (len > PAGE_SIZE)
|
|
|
len = PAGE_SIZE;
|
|
|
res = access_process_vm(task, mm->env_start, buffer, len, 0);
|
|
|
- if (!may_ptrace_attach(task))
|
|
|
+ if (!ptrace_may_attach(task))
|
|
|
res = -ESRCH;
|
|
|
mmput(mm);
|
|
|
}
|
|
@@ -685,7 +658,7 @@ static ssize_t mem_read(struct file * file, char __user * buf,
|
|
|
int ret = -ESRCH;
|
|
|
struct mm_struct *mm;
|
|
|
|
|
|
- if (!MAY_PTRACE(task) || !may_ptrace_attach(task))
|
|
|
+ if (!MAY_PTRACE(task) || !ptrace_may_attach(task))
|
|
|
goto out;
|
|
|
|
|
|
ret = -ENOMEM;
|
|
@@ -711,7 +684,7 @@ static ssize_t mem_read(struct file * file, char __user * buf,
|
|
|
|
|
|
this_len = (count > PAGE_SIZE) ? PAGE_SIZE : count;
|
|
|
retval = access_process_vm(task, src, page, this_len, 0);
|
|
|
- if (!retval || !MAY_PTRACE(task) || !may_ptrace_attach(task)) {
|
|
|
+ if (!retval || !MAY_PTRACE(task) || !ptrace_may_attach(task)) {
|
|
|
if (!ret)
|
|
|
ret = -EIO;
|
|
|
break;
|
|
@@ -749,7 +722,7 @@ static ssize_t mem_write(struct file * file, const char * buf,
|
|
|
struct task_struct *task = proc_task(file->f_dentry->d_inode);
|
|
|
unsigned long dst = *ppos;
|
|
|
|
|
|
- if (!MAY_PTRACE(task) || !may_ptrace_attach(task))
|
|
|
+ if (!MAY_PTRACE(task) || !ptrace_may_attach(task))
|
|
|
return -ESRCH;
|
|
|
|
|
|
page = (char *)__get_free_page(GFP_USER);
|