diff options
Diffstat (limited to 'arch/m32r/kernel/ptrace.c')
-rw-r--r-- | arch/m32r/kernel/ptrace.c | 22 |
1 files changed, 5 insertions, 17 deletions
diff --git a/arch/m32r/kernel/ptrace.c b/arch/m32r/kernel/ptrace.c index 078d2a0e71c2..9b75caaf5cec 100644 --- a/arch/m32r/kernel/ptrace.c +++ b/arch/m32r/kernel/ptrace.c | |||
@@ -762,28 +762,16 @@ asmlinkage long sys_ptrace(long request, long pid, long addr, long data) | |||
762 | int ret; | 762 | int ret; |
763 | 763 | ||
764 | lock_kernel(); | 764 | lock_kernel(); |
765 | ret = -EPERM; | ||
766 | if (request == PTRACE_TRACEME) { | 765 | if (request == PTRACE_TRACEME) { |
767 | /* are we already being traced? */ | 766 | ret = ptrace_traceme(); |
768 | if (current->ptrace & PT_PTRACED) | ||
769 | goto out; | ||
770 | /* set the ptrace bit in the process flags. */ | ||
771 | current->ptrace |= PT_PTRACED; | ||
772 | ret = 0; | ||
773 | goto out; | 767 | goto out; |
774 | } | 768 | } |
775 | ret = -ESRCH; | ||
776 | read_lock(&tasklist_lock); | ||
777 | child = find_task_by_pid(pid); | ||
778 | if (child) | ||
779 | get_task_struct(child); | ||
780 | read_unlock(&tasklist_lock); | ||
781 | if (!child) | ||
782 | goto out; | ||
783 | 769 | ||
784 | ret = -EPERM; | 770 | child = ptrace_get_task_struct(pid); |
785 | if (pid == 1) /* you may not mess with init */ | 771 | if (IS_ERR(child)) { |
772 | ret = PTR_ERR(child); | ||
786 | goto out; | 773 | goto out; |
774 | } | ||
787 | 775 | ||
788 | if (request == PTRACE_ATTACH) { | 776 | if (request == PTRACE_ATTACH) { |
789 | ret = ptrace_attach(child); | 777 | ret = ptrace_attach(child); |