/*
* psw and gprs are stored on the stack
*/
- tmp = *(addr_t *)((addr_t) &__KSTK_PTREGS(child)->psw + addr);
+ tmp = *(addr_t *)((addr_t) __KSTK_PTREGS(child) + addr);
if (addr == (addr_t) &dummy->regs.psw.mask)
/* Remove per bit from user psw. */
tmp &= ~PSW_MASK_PER;
} else
tmp = 0;
- return put_user(tmp, (addr_t __user *) data);
+ return put_user(tmp, (addr_t *) data);
}
/*
high order bit but older gdb's rely on it */
data |= PSW_ADDR_AMODE;
#endif
- *(addr_t *)((addr_t) &__KSTK_PTREGS(child)->psw + addr) = data;
+ *(addr_t *)((addr_t) __KSTK_PTREGS(child) + addr) = data;
} else if (addr < (addr_t) (&dummy->regs.orig_gpr2)) {
/*
copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
if (copied != sizeof(tmp))
return -EIO;
- return put_user(tmp, (unsigned long __user *) data);
+ return put_user(tmp, (unsigned long *) data);
case PTRACE_PEEKUSR:
/* read the word at location addr in the USER area. */
case PTRACE_PEEKUSR_AREA:
case PTRACE_POKEUSR_AREA:
- if (copy_from_user(&parea, (void __user *) addr,
- sizeof(parea)))
+ if (copy_from_user(&parea, (void *) addr, sizeof(parea)))
return -EFAULT;
addr = parea.kernel_addr;
data = parea.process_addr;
ret = peek_user(child, addr, data);
else {
addr_t tmp;
- if (get_user (tmp, (addr_t __user *) data))
+ if (get_user (tmp, (addr_t *) data))
return -EFAULT;
ret = poke_user(child, addr, tmp);
}
PSW32_ADDR_AMODE31;
} else {
/* gpr 0-15 */
- tmp = *(__u32 *)((addr_t) &__KSTK_PTREGS(child)->psw +
+ tmp = *(__u32 *)((addr_t) __KSTK_PTREGS(child) +
addr*2 + 4);
}
} else if (addr < (addr_t) (&dummy32->regs.orig_gpr2)) {
} else
tmp = 0;
- return put_user(tmp, (__u32 __user *) data);
+ return put_user(tmp, (__u32 *) data);
}
/*
(__u64) tmp & PSW32_ADDR_INSN;
} else {
/* gpr 0-15 */
- *(__u32*)((addr_t) &__KSTK_PTREGS(child)->psw
- + addr*2 + 4) = tmp;
+ *(__u32*)((addr_t) __KSTK_PTREGS(child) + addr*2 + 4) =
+ tmp;
}
} else if (addr < (addr_t) (&dummy32->regs.orig_gpr2)) {
/*
copied = access_process_vm(child, addr, &tmp, sizeof(tmp), 0);
if (copied != sizeof(tmp))
return -EIO;
- return put_user(tmp, (unsigned int __user *) data);
+ return put_user(tmp, (unsigned int *) data);
case PTRACE_PEEKUSR:
/* read the word at location addr in the USER area. */
case PTRACE_PEEKUSR_AREA:
case PTRACE_POKEUSR_AREA:
- if (copy_from_user(&parea, (void __user *) addr,
- sizeof(parea)))
+ if (copy_from_user(&parea, (void *) addr, sizeof(parea)))
return -EFAULT;
addr = parea.kernel_addr;
data = parea.process_addr;
ret = peek_user_emu31(child, addr, data);
else {
__u32 tmp;
- if (get_user (tmp, (__u32 __user *) data))
+ if (get_user (tmp, (__u32 *) data))
return -EFAULT;
ret = poke_user_emu31(child, addr, tmp);
}
read_unlock(&tasklist_lock);
if (!child)
goto out;
+ if (!vx_check(vx_task_xid(child), VX_WATCH|VX_IDENT))
+ goto out_tsk;
ret = do_ptrace(child, request, addr, data);
-
+out_tsk:
put_task_struct(child);
out:
unlock_kernel();