Loading arch/ia64/kernel/ptrace.c +31 −59 Original line number Original line Diff line number Diff line Loading @@ -1491,37 +1491,22 @@ user_disable_single_step (struct task_struct *child) void void ptrace_disable (struct task_struct *child) ptrace_disable (struct task_struct *child) { { struct ia64_psr *child_psr = ia64_psr(task_pt_regs(child)); user_disable_single_step(child); /* make sure the single step/taken-branch trap bits are not set: */ clear_tsk_thread_flag(child, TIF_SINGLESTEP); child_psr->ss = 0; child_psr->tb = 0; } } long long arch_ptrace (struct task_struct *child, long request, long addr, long data) arch_ptrace (struct task_struct *child, long request, long addr, long data) { { struct pt_regs *pt; struct switch_stack *sw; long ret; pt = task_pt_regs(child); sw = (struct switch_stack *) (child->thread.ksp + 16); switch (request) { switch (request) { case PTRACE_PEEKTEXT: case PTRACE_PEEKTEXT: case PTRACE_PEEKDATA: case PTRACE_PEEKDATA: /* read word at location addr */ /* read word at location addr */ if (access_process_vm(child, addr, &data, sizeof(data), 0) if (access_process_vm(child, addr, &data, sizeof(data), 0) != sizeof(data)) { != sizeof(data)) ret = -EIO; return -EIO; goto out_tsk; /* ensure return value is not mistaken for error code */ } ret = data; /* ensure "ret" is not mistaken as an error code */ force_successful_syscall_return(); force_successful_syscall_return(); goto out_tsk; return data; /* PTRACE_POKETEXT and PTRACE_POKEDATA is handled /* PTRACE_POKETEXT and PTRACE_POKEDATA is handled * by the generic ptrace_request(). * by the generic ptrace_request(). Loading @@ -1529,50 +1514,37 @@ arch_ptrace (struct task_struct *child, long request, long addr, long data) case PTRACE_PEEKUSR: case PTRACE_PEEKUSR: /* read the word at addr in the USER area */ /* read the word at addr in the USER area */ if (access_uarea(child, addr, &data, 0) < 0) { if (access_uarea(child, addr, &data, 0) < 0) ret = -EIO; return -EIO; goto out_tsk; /* ensure return value is not mistaken for error code */ } ret = data; /* ensure "ret" is not mistaken as an error code */ force_successful_syscall_return(); force_successful_syscall_return(); goto out_tsk; return data; case PTRACE_POKEUSR: case PTRACE_POKEUSR: /* write the word at addr in the USER area */ /* write the word at addr in the USER area */ if (access_uarea(child, addr, &data, 1) < 0) { if (access_uarea(child, addr, &data, 1) < 0) ret = -EIO; return -EIO; goto out_tsk; return 0; } ret = 0; goto out_tsk; case PTRACE_OLD_GETSIGINFO: case PTRACE_OLD_GETSIGINFO: /* for backwards-compatibility */ /* for backwards-compatibility */ ret = ptrace_request(child, PTRACE_GETSIGINFO, addr, data); return ptrace_request(child, PTRACE_GETSIGINFO, addr, data); goto out_tsk; case PTRACE_OLD_SETSIGINFO: case PTRACE_OLD_SETSIGINFO: /* for backwards-compatibility */ /* for backwards-compatibility */ ret = ptrace_request(child, PTRACE_SETSIGINFO, addr, data); return ptrace_request(child, PTRACE_SETSIGINFO, addr, data); goto out_tsk; case PTRACE_GETREGS: case PTRACE_GETREGS: ret = ptrace_getregs(child, return ptrace_getregs(child, (struct pt_all_user_regs __user *) data); (struct pt_all_user_regs __user *) data); goto out_tsk; case PTRACE_SETREGS: case PTRACE_SETREGS: ret = ptrace_setregs(child, return ptrace_setregs(child, (struct pt_all_user_regs __user *) data); (struct pt_all_user_regs __user *) data); goto out_tsk; default: default: ret = ptrace_request(child, request, addr, data); return ptrace_request(child, request, addr, data); goto out_tsk; } } out_tsk: return ret; } } Loading Loading
arch/ia64/kernel/ptrace.c +31 −59 Original line number Original line Diff line number Diff line Loading @@ -1491,37 +1491,22 @@ user_disable_single_step (struct task_struct *child) void void ptrace_disable (struct task_struct *child) ptrace_disable (struct task_struct *child) { { struct ia64_psr *child_psr = ia64_psr(task_pt_regs(child)); user_disable_single_step(child); /* make sure the single step/taken-branch trap bits are not set: */ clear_tsk_thread_flag(child, TIF_SINGLESTEP); child_psr->ss = 0; child_psr->tb = 0; } } long long arch_ptrace (struct task_struct *child, long request, long addr, long data) arch_ptrace (struct task_struct *child, long request, long addr, long data) { { struct pt_regs *pt; struct switch_stack *sw; long ret; pt = task_pt_regs(child); sw = (struct switch_stack *) (child->thread.ksp + 16); switch (request) { switch (request) { case PTRACE_PEEKTEXT: case PTRACE_PEEKTEXT: case PTRACE_PEEKDATA: case PTRACE_PEEKDATA: /* read word at location addr */ /* read word at location addr */ if (access_process_vm(child, addr, &data, sizeof(data), 0) if (access_process_vm(child, addr, &data, sizeof(data), 0) != sizeof(data)) { != sizeof(data)) ret = -EIO; return -EIO; goto out_tsk; /* ensure return value is not mistaken for error code */ } ret = data; /* ensure "ret" is not mistaken as an error code */ force_successful_syscall_return(); force_successful_syscall_return(); goto out_tsk; return data; /* PTRACE_POKETEXT and PTRACE_POKEDATA is handled /* PTRACE_POKETEXT and PTRACE_POKEDATA is handled * by the generic ptrace_request(). * by the generic ptrace_request(). Loading @@ -1529,50 +1514,37 @@ arch_ptrace (struct task_struct *child, long request, long addr, long data) case PTRACE_PEEKUSR: case PTRACE_PEEKUSR: /* read the word at addr in the USER area */ /* read the word at addr in the USER area */ if (access_uarea(child, addr, &data, 0) < 0) { if (access_uarea(child, addr, &data, 0) < 0) ret = -EIO; return -EIO; goto out_tsk; /* ensure return value is not mistaken for error code */ } ret = data; /* ensure "ret" is not mistaken as an error code */ force_successful_syscall_return(); force_successful_syscall_return(); goto out_tsk; return data; case PTRACE_POKEUSR: case PTRACE_POKEUSR: /* write the word at addr in the USER area */ /* write the word at addr in the USER area */ if (access_uarea(child, addr, &data, 1) < 0) { if (access_uarea(child, addr, &data, 1) < 0) ret = -EIO; return -EIO; goto out_tsk; return 0; } ret = 0; goto out_tsk; case PTRACE_OLD_GETSIGINFO: case PTRACE_OLD_GETSIGINFO: /* for backwards-compatibility */ /* for backwards-compatibility */ ret = ptrace_request(child, PTRACE_GETSIGINFO, addr, data); return ptrace_request(child, PTRACE_GETSIGINFO, addr, data); goto out_tsk; case PTRACE_OLD_SETSIGINFO: case PTRACE_OLD_SETSIGINFO: /* for backwards-compatibility */ /* for backwards-compatibility */ ret = ptrace_request(child, PTRACE_SETSIGINFO, addr, data); return ptrace_request(child, PTRACE_SETSIGINFO, addr, data); goto out_tsk; case PTRACE_GETREGS: case PTRACE_GETREGS: ret = ptrace_getregs(child, return ptrace_getregs(child, (struct pt_all_user_regs __user *) data); (struct pt_all_user_regs __user *) data); goto out_tsk; case PTRACE_SETREGS: case PTRACE_SETREGS: ret = ptrace_setregs(child, return ptrace_setregs(child, (struct pt_all_user_regs __user *) data); (struct pt_all_user_regs __user *) data); goto out_tsk; default: default: ret = ptrace_request(child, request, addr, data); return ptrace_request(child, request, addr, data); goto out_tsk; } } out_tsk: return ret; } } Loading