#include <linux/smp.h>
#include <linux/smp_lock.h>
#include <linux/security.h>
+#include <linux/signal.h>
#include <asm/pgtable.h>
#include <asm/system.h>
s, (int) request, (int) pid, addr, data, addr2);
}
#endif
- if(request == PTRACE_TRACEME) {
- int ret;
+ if (request == PTRACE_TRACEME) {
+ int my_ret;
/* are we already being traced? */
if (current->ptrace & PT_PTRACED) {
pt_error_return(regs, EPERM);
goto out;
}
- ret = security_ptrace(current->parent, current);
- if (ret) {
- pt_error_return(regs, -ret);
+ my_ret = security_ptrace(current->parent, current);
+ if (my_ret) {
+ pt_error_return(regs, -my_ret);
goto out;
}
goto out;
}
#ifndef ALLOW_INIT_TRACING
- if(pid == 1) {
+ if (pid == 1) {
/* Can't dork with init. */
pt_error_return(regs, EPERM);
goto out;
struct pt_regs *cregs = child->thread.kregs;
int rval;
- rval = verify_area(VERIFY_WRITE, pregs, sizeof(struct pt_regs));
- if(rval) {
+ if (!access_ok(VERIFY_WRITE, pregs, sizeof(struct pt_regs))) {
+ rval = -EFAULT;
pt_error_return(regs, -rval);
goto out_tsk;
}
/* Must be careful, tracing process can only set certain
* bits in the psr.
*/
- i = verify_area(VERIFY_READ, pregs, sizeof(struct pt_regs));
- if(i) {
- pt_error_return(regs, -i);
+ if (!access_ok(VERIFY_READ, pregs, sizeof(struct pt_regs))) {
+ pt_error_return(regs, EFAULT);
goto out_tsk;
}
__get_user(psr, (&pregs->psr));
psr &= PSR_ICC;
cregs->psr &= ~PSR_ICC;
cregs->psr |= psr;
- if(!((pc | npc) & 3)) {
+ if (!((pc | npc) & 3)) {
cregs->pc = pc;
cregs->npc =npc;
}
struct fps __user *fps = (struct fps __user *) addr;
int i;
- i = verify_area(VERIFY_WRITE, fps, sizeof(struct fps));
- if(i) {
+ if (!access_ok(VERIFY_WRITE, fps, sizeof(struct fps))) {
+ i = -EFAULT;
pt_error_return(regs, -i);
goto out_tsk;
}
struct fps __user *fps = (struct fps __user *) addr;
int i;
- i = verify_area(VERIFY_READ, fps, sizeof(struct fps));
- if(i) {
+ if (!access_ok(VERIFY_READ, fps, sizeof(struct fps))) {
+ i = -EFAULT;
pt_error_return(regs, -i);
goto out_tsk;
}
addr = 1;
case PTRACE_CONT: { /* restart after signal. */
- if (data > _NSIG) {
+ if (!valid_signal(data)) {
pt_error_return(regs, EIO);
goto out_tsk;
}