[PATCH] use ptrace_get_task_struct in various places
The ptrace_get_task_struct() helper that I added as part of the ptrace consolidation is useful in variety of places that currently opencode it. Switch them to the common helpers. Add a ptrace_traceme() helper that needs to be explicitly called, and simplify the ptrace_get_task_struct() interface. We don't need the request argument now, and we return the task_struct directly, using ERR_PTR() for error returns. It's a bit more code in the callers, but we have two sane routines that do one thing well now. Signed-off-by: Christoph Hellwig <hch@lst.de> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
committed by
Linus Torvalds
parent
6b34350f49
commit
6b9c7ed848
@ -286,40 +286,17 @@ asmlinkage void do_ptrace(struct pt_regs *regs)
|
||||
s, (int) request, (int) pid, addr, data, addr2);
|
||||
}
|
||||
#endif
|
||||
|
||||
if (request == PTRACE_TRACEME) {
|
||||
int my_ret;
|
||||
|
||||
/* are we already being traced? */
|
||||
if (current->ptrace & PT_PTRACED) {
|
||||
pt_error_return(regs, EPERM);
|
||||
goto out;
|
||||
}
|
||||
my_ret = security_ptrace(current->parent, current);
|
||||
if (my_ret) {
|
||||
pt_error_return(regs, -my_ret);
|
||||
goto out;
|
||||
}
|
||||
|
||||
/* set the ptrace bit in the process flags. */
|
||||
current->ptrace |= PT_PTRACED;
|
||||
ret = ptrace_traceme();
|
||||
pt_succ_return(regs, 0);
|
||||
goto out;
|
||||
}
|
||||
#ifndef ALLOW_INIT_TRACING
|
||||
if (pid == 1) {
|
||||
/* Can't dork with init. */
|
||||
pt_error_return(regs, EPERM);
|
||||
goto out;
|
||||
}
|
||||
#endif
|
||||
read_lock(&tasklist_lock);
|
||||
child = find_task_by_pid(pid);
|
||||
if (child)
|
||||
get_task_struct(child);
|
||||
read_unlock(&tasklist_lock);
|
||||
|
||||
if (!child) {
|
||||
pt_error_return(regs, ESRCH);
|
||||
child = ptrace_get_task_struct(pid);
|
||||
if (IS_ERR(child)) {
|
||||
ret = PTR_ERR(child);
|
||||
pt_error_return(regs, -ret);
|
||||
goto out;
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user