|
@@ -202,6 +202,26 @@ static int proc_root_link(struct inode *inode, struct dentry **dentry, struct vf
|
|
(task->state == TASK_STOPPED || task->state == TASK_TRACED) && \
|
|
(task->state == TASK_STOPPED || task->state == TASK_TRACED) && \
|
|
security_ptrace(current,task) == 0))
|
|
security_ptrace(current,task) == 0))
|
|
|
|
|
|
|
|
+struct mm_struct *mm_for_maps(struct task_struct *task)
|
|
|
|
+{
|
|
|
|
+ struct mm_struct *mm = get_task_mm(task);
|
|
|
|
+ if (!mm)
|
|
|
|
+ return NULL;
|
|
|
|
+ down_read(&mm->mmap_sem);
|
|
|
|
+ task_lock(task);
|
|
|
|
+ if (task->mm != mm)
|
|
|
|
+ goto out;
|
|
|
|
+ if (task->mm != current->mm && __ptrace_may_attach(task) < 0)
|
|
|
|
+ goto out;
|
|
|
|
+ task_unlock(task);
|
|
|
|
+ return mm;
|
|
|
|
+out:
|
|
|
|
+ task_unlock(task);
|
|
|
|
+ up_read(&mm->mmap_sem);
|
|
|
|
+ mmput(mm);
|
|
|
|
+ return NULL;
|
|
|
|
+}
|
|
|
|
+
|
|
static int proc_pid_cmdline(struct task_struct *task, char * buffer)
|
|
static int proc_pid_cmdline(struct task_struct *task, char * buffer)
|
|
{
|
|
{
|
|
int res = 0;
|
|
int res = 0;
|