s390: Remove self ptrace IEEE_IP hack.
Subsystems (2)
PATCH 1/1 s390: Remove self ptrace IEEE_IP hack.
From: Martin Schwidefsky <[email protected]>
The self referential PT_IEEE_IP ptrace peek & poke calls have been broken for that last 6 years. For peek the code always returns 0 instead of the last ieee fault and for poke the code does nothing. Since nobody noticed the code seems to be superfluous. So lets remove it.
---
arch/s390/kernel/ptrace.c | 20 -------------------- 1 file changed, 20 deletions(-)
arch/s390/kernel/ptrace.c +0 -20
@@ -607,8 +607,6 @@ do_ptrace_emu31(struct task_struct *chil }#endif -#define PT32_IEEE_IP 0x13c -static int do_ptrace (struct task_struct *child,long request,long addr,long data) {
@@ -617,24 +615,6 @@ do_ptrace(struct task_struct *child, lonif (request ==PTRACE_ATTACH )return ptrace_attach (child); -/* -* Special cases to get/store the ieee instructions pointer. -*/ -if (child == current) { -if (request ==PTRACE_PEEKUSR && addr ==PT_IEEE_IP ) -return peek_user (child, addr, data); -if (request ==PTRACE_POKEUSR && addr ==PT_IEEE_IP ) -return poke_user (child, addr, data); -#ifdef CONFIG_COMPAT -if (request ==PTRACE_PEEKUSR && - addr ==PT32_IEEE_IP &&test_thread_flag (TIF_31BIT )) -return peek_user_emu31 (child, addr, data); -if (request ==PTRACE_POKEUSR && - addr ==PT32_IEEE_IP &&test_thread_flag (TIF_31BIT )) -return poke_user_emu31 (child, addr, data); -#endif - } - ret =ptrace_check_attach (child, request ==PTRACE_KILL );if (ret <0 )return ret;
Quoted 7 lines · Martin Schwidefsky
From: Martin Schwidefsky <[email protected]>
The self referential
PT_IEEE_IPptrace peek & poke calls have been broken for that last 6 years. For peek the code always returns 0 instead of the last ieee fault and for poke the code does nothing. Since nobody noticed the code seems to be superfluous. So lets remove it.
After this the switch to the generic sys_ptrace is trivial. Care to submit a patch for that aswell?
Quoted 11 lines · Christoph Hellwig
Quoted 7 lines · Martin Schwidefsky
From: Martin Schwidefsky <[email protected]>
The self referential
PT_IEEE_IPptrace peek & poke calls have been broken for that last 6 years. For peek the code always returns 0 instead of the last ieee fault and for poke the code does nothing. Since nobody noticed the code seems to be superfluous. So lets remove it.After this the switch to the generic
sys_ptraceis trivial. Care to submit a patch for that aswell?
True, that makes sense. I'll do that right after lunch.
Signature · 4 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin.
Quoted 3 lines · Christoph Hellwig
After this the switch to the generic
sys_ptraceis trivial. Care to submit a patch for that aswell?
Here we go..
Signature · 87 lines
blue skies, Martin. "Reality continues to ruin my life." - Calvin. --- Subject: [PATCH] s390: use generic sys_ptrace From: Martin Schwidefsky <[email protected]> After the PT_IEEE_IP hack has been removed s390 can now use the common code sys_ptrace function. Signed-off-by: Martin Schwidefsky <[email protected]> --- arch/s390/kernel/ptrace.c | 37 +------------------------------------ include/asm-s390/ptrace.h | 2 -- 2 files changed, 1 insertion(+), 38 deletions(-) diff -urpN linux-2.6/arch/s390/kernel/ptrace.c linux-2.6-patched/arch/s390/kernel/ptrace.c --- linux-2.6/arch/s390/kernel/ptrace.c 2008-04-30 13:33:14.000000000 +0200 +++ linux-2.6-patched/arch/s390/kernel/ptrace.c 2008-04-30 13:33:14.000000000 +0200 @@ -607,18 +607,8 @@ do_ptrace_emu31(struct task_struct *chil } #endif -static int -do_ptrace(struct task_struct *child, long request, long addr, long data) +long arch_ptrace(struct task_struct *child, long request, long addr, long data) { - int ret; - - if (request == PTRACE_ATTACH) - return ptrace_attach(child); - - ret = ptrace_check_attach(child, request == PTRACE_KILL); - if (ret < 0) - return ret; - switch (request) { case PTRACE_SYSCALL: /* continue and stop at next (return from) syscall */ @@ -673,31 +663,6 @@ do_ptrace(struct task_struct *child, lon return -EIO; } -asmlinkage long -sys_ptrace(long request, long pid, long addr, long data) -{ - struct task_struct *child; - int ret; - - lock_kernel(); - if (request == PTRACE_TRACEME) { - ret = ptrace_traceme(); - goto out; - } - - child = ptrace_get_task_struct(pid); - if (IS_ERR(child)) { - ret = PTR_ERR(child); - goto out; - } - - ret = do_ptrace(child, request, addr, data); - put_task_struct(child); -out: - unlock_kernel(); - return ret; -} - asmlinkage void syscall_trace(struct pt_regs *regs, int entryexit) { diff -urpN linux-2.6/include/asm-s390/ptrace.h linux-2.6-patched/include/asm-s390/ptrace.h --- linux-2.6/include/asm-s390/ptrace.h 2008-04-17 04:49:44.000000000 +0200 +++ linux-2.6-patched/include/asm-s390/ptrace.h 2008-04-30 13:33:14.000000000 +0200 @@ -463,8 +463,6 @@ struct user_regs_struct }; #ifdef __KERNEL__ -#define __ARCH_SYS_PTRACE 1 - /* * These are defined as per linux/ptrace.h, which see. */
Quoted 1 line · Martin Schwidefsky
Here we go..
Looks good.
And now that the last architecture (s390) has been converted to the generic ptrace code the __ARCH_SYS_PTRACE ifdef can go away. Once we've also converted all architectures to compat_sys_ptrace some more code can be made private to kernel/ptrace.c.
kernel/ptrace.c +0 -2
@@ -543,7 +543,6 @@ struct task_struct *ptrace_get_task_stru#define arch_ptrace_attach (child) do { } while (0)#endif -#ifndef __ARCH_SYS_PTRACEasmlinkage long sys_ptrace (long request,long pid,long addr,long data) {struct task_struct *child;
@@ -591,7 +590,6 @@ asmlinkage long sys_ptrace(long request,unlock_kernel ();return ret; } -#endif /* __ARCH_SYS_PTRACE */ int generic_ptrace_peekdata (struct task_struct *tsk,long addr,long data) {