diff options
Diffstat (limited to 'arch/cris/arch-v10/kernel/ptrace.c')
-rw-r--r-- | arch/cris/arch-v10/kernel/ptrace.c | 51 |
1 files changed, 2 insertions, 49 deletions
diff --git a/arch/cris/arch-v10/kernel/ptrace.c b/arch/cris/arch-v10/kernel/ptrace.c index 130dd214e41d..6cbd34a27b90 100644 --- a/arch/cris/arch-v10/kernel/ptrace.c +++ b/arch/cris/arch-v10/kernel/ptrace.c | |||
@@ -76,55 +76,11 @@ ptrace_disable(struct task_struct *child) | |||
76 | * (in user space) where the result of the ptrace call is written (instead of | 76 | * (in user space) where the result of the ptrace call is written (instead of |
77 | * being returned). | 77 | * being returned). |
78 | */ | 78 | */ |
79 | asmlinkage int | 79 | long arch_ptrace(struct task_struct *child, long request, long addr, long data) |
80 | sys_ptrace(long request, long pid, long addr, long data) | ||
81 | { | 80 | { |
82 | struct task_struct *child; | ||
83 | int ret; | 81 | int ret; |
84 | unsigned long __user *datap = (unsigned long __user *)data; | 82 | unsigned long __user *datap = (unsigned long __user *)data; |
85 | 83 | ||
86 | lock_kernel(); | ||
87 | ret = -EPERM; | ||
88 | |||
89 | if (request == PTRACE_TRACEME) { | ||
90 | /* are we already being traced? */ | ||
91 | if (current->ptrace & PT_PTRACED) | ||
92 | goto out; | ||
93 | ret = security_ptrace(current->parent, current); | ||
94 | if (ret) | ||
95 | goto out; | ||
96 | /* set the ptrace bit in the process flags. */ | ||
97 | current->ptrace |= PT_PTRACED; | ||
98 | ret = 0; | ||
99 | goto out; | ||
100 | } | ||
101 | |||
102 | ret = -ESRCH; | ||
103 | read_lock(&tasklist_lock); | ||
104 | child = find_task_by_pid(pid); | ||
105 | |||
106 | if (child) | ||
107 | get_task_struct(child); | ||
108 | |||
109 | read_unlock(&tasklist_lock); | ||
110 | |||
111 | if (!child) | ||
112 | goto out; | ||
113 | |||
114 | ret = -EPERM; | ||
115 | |||
116 | if (pid == 1) /* Leave the init process alone! */ | ||
117 | goto out_tsk; | ||
118 | |||
119 | if (request == PTRACE_ATTACH) { | ||
120 | ret = ptrace_attach(child); | ||
121 | goto out_tsk; | ||
122 | } | ||
123 | |||
124 | ret = ptrace_check_attach(child, request == PTRACE_KILL); | ||
125 | if (ret < 0) | ||
126 | goto out_tsk; | ||
127 | |||
128 | switch (request) { | 84 | switch (request) { |
129 | /* Read word at location address. */ | 85 | /* Read word at location address. */ |
130 | case PTRACE_PEEKTEXT: | 86 | case PTRACE_PEEKTEXT: |
@@ -289,10 +245,7 @@ sys_ptrace(long request, long pid, long addr, long data) | |||
289 | ret = ptrace_request(child, request, addr, data); | 245 | ret = ptrace_request(child, request, addr, data); |
290 | break; | 246 | break; |
291 | } | 247 | } |
292 | out_tsk: | 248 | |
293 | put_task_struct(child); | ||
294 | out: | ||
295 | unlock_kernel(); | ||
296 | return ret; | 249 | return ret; |
297 | } | 250 | } |
298 | 251 | ||