@@ -564,7 +564,7 @@
child->p_pptr = child->p_opptr;
SET_LINKS(child);
write_unlock_irqrestore(&tasklist_lock, flags);
- /* make sure the single step bit is not set. */
+ /* make sure the single step bit is not set. */
tmp = get_stack_long(child, EFL_OFFSET) & ~TRAP_FLAG;
put_stack_long(child, EFL_OFFSET, tmp);
wake_up_process(child);
@@ -573,89 +573,66 @@
}
case PTRACE_GETREGS: { /* Get all gp regs from the child. */
- if (!access_ok(VERIFY_WRITE, (unsigned *)data,
- 17*sizeof(long)))
- {
- ret = -EIO;
- goto out;
- }
- for ( i = 0; i < 17*sizeof(long); i += sizeof(long) )
- {
- __put_user(getreg(child, i),(unsigned long *) data);
+ for (i = 0; i < 17*sizeof(long); i += sizeof(long)) {
+ ret = put_user(getreg(child, i),(unsigned long *) data);
+ if (ret) break;
data += sizeof(long);
- }
- ret = 0;
+ }
goto out;
- };
+ }
case PTRACE_SETREGS: { /* Set all gp regs in the child. */
unsigned long tmp;
- if (!access_ok(VERIFY_READ, (unsigned *)data,
- 17*sizeof(long)))
- {
- ret = -EIO;
- goto out;
- }
- for ( i = 0; i < 17*sizeof(long); i += sizeof(long) )
- {
- __get_user(tmp, (unsigned long *) data);
+ for (i = 0; i < 17*sizeof(long); i += sizeof(long)) {
+ ret = get_user(tmp, (unsigned long *) data);
+ if (ret) break;
putreg(child, i, tmp);
data += sizeof(long);
- }
- ret = 0;
+ }
goto out;
- };
+ }
case PTRACE_GETFPREGS: { /* Get the child FPU state. */
- if (!access_ok(VERIFY_WRITE, (unsigned *)data,
- sizeof(struct user_i387_struct)))
- {
- ret = -EIO;
- goto out;
- }
ret = 0;
- if ( !child->used_math ) {
- /* Simulate an empty FPU. */
- child->tss.i387.hard.cwd = 0xffff037f;
- child->tss.i387.hard.swd = 0xffff0000;
- child->tss.i387.hard.twd = 0xffffffff;
+ if (!child->used_math) {
+ /* Simulate an empty FPU. */
+ child->tss.i387.hard.cwd = 0xffff037f;
+ child->tss.i387.hard.swd = 0xffff0000;
+ child->tss.i387.hard.twd = 0xffffffff;
}
#ifdef CONFIG_MATH_EMULATION
if ( boot_cpu_data.hard_math ) {
#endif
- __copy_to_user((void *)data, &child->tss.i387.hard,
- sizeof(struct user_i387_struct));
+ ret = copy_to_user((void *)data,
+ &child->tss.i387.hard,
+ sizeof(struct user_i387_struct))
+ ? -EFAULT : 0 ;
#ifdef CONFIG_MATH_EMULATION
} else {
- save_i387_soft(&child->tss.i387.soft,
- (struct _fpstate *)data);
+ save_i387_soft(&child->tss.i387.soft,
+ (struct _fpstate *)data);
}
#endif
goto out;
};
case PTRACE_SETFPREGS: { /* Set the child FPU state. */
- if (!access_ok(VERIFY_READ, (unsigned *)data,
- sizeof(struct user_i387_struct)))
- {
- ret = -EIO;
- goto out;
- }
+ ret = 0;
child->used_math = 1;
#ifdef CONFIG_MATH_EMULATION
if ( boot_cpu_data.hard_math ) {
#endif
- __copy_from_user(&child->tss.i387.hard, (void *)data,
- sizeof(struct user_i387_struct));
- child->flags &= ~PF_USEDFPU;
- stts();
+ ret = copy_from_user(&child->tss.i387.hard, (void *)data,
+ sizeof(struct user_i387_struct))
+ ? -EFAULT : 0;
+ child->flags &= ~PF_USEDFPU;
+ stts();
#ifdef CONFIG_MATH_EMULATION
} else {
- restore_i387_soft(&child->tss.i387.soft,
- (struct _fpstate *)data);
+ restore_i387_soft(&child->tss.i387.soft,
+ (struct _fpstate *)data);
}
#endif
- ret = 0;
goto out;
};