X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=arch%2Fs390%2Fkernel%2Fptrace.c;h=fa7875fbacf269b50392bf86a8dbe45b8da967bd;hb=fbe873afbb149c2d419a726afd27fa7be91cec58;hp=a0ddc4f7d9e5060a00bc4601f345ce9358ee65fd;hpb=62f00ab52b8aa6fe7d1db81d6477c635f3fa652a;p=linux-2.6.git diff --git a/arch/s390/kernel/ptrace.c b/arch/s390/kernel/ptrace.c index a0ddc4f7d..fa7875fba 100644 --- a/arch/s390/kernel/ptrace.c +++ b/arch/s390/kernel/ptrace.c @@ -141,7 +141,7 @@ peek_user(struct task_struct *child, addr_t addr, addr_t data) /* * 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; @@ -176,7 +176,7 @@ peek_user(struct task_struct *child, addr_t addr, addr_t data) } else tmp = 0; - return put_user(tmp, (addr_t __user *) data); + return put_user(tmp, (addr_t *) data); } /* @@ -215,7 +215,7 @@ poke_user(struct task_struct *child, addr_t addr, 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)) { /* @@ -269,7 +269,7 @@ do_ptrace_normal(struct task_struct *child, long request, long addr, long data) 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. */ @@ -291,8 +291,7 @@ do_ptrace_normal(struct task_struct *child, long request, long addr, long data) 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; @@ -302,7 +301,7 @@ do_ptrace_normal(struct task_struct *child, long request, long addr, long data) 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); } @@ -361,7 +360,7 @@ peek_user_emu31(struct task_struct *child, addr_t addr, addr_t data) 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)) { @@ -403,7 +402,7 @@ peek_user_emu31(struct task_struct *child, addr_t addr, addr_t data) } else tmp = 0; - return put_user(tmp, (__u32 __user *) data); + return put_user(tmp, (__u32 *) data); } /* @@ -440,8 +439,8 @@ poke_user_emu31(struct task_struct *child, addr_t addr, addr_t 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)) { /* @@ -510,7 +509,7 @@ do_ptrace_emu31(struct task_struct *child, long request, long addr, long data) 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. */ @@ -531,8 +530,7 @@ do_ptrace_emu31(struct task_struct *child, long request, long addr, long data) 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; @@ -542,7 +540,7 @@ do_ptrace_emu31(struct task_struct *child, long request, long addr, long data) 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); } @@ -682,9 +680,11 @@ sys_ptrace(long request, long pid, long addr, long data) 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();