| From d765628765956808985bfa1cbb1d3a38cd6b48f0 Mon Sep 17 00:00:00 2001 |
| From: David S. Miller <davem@davemloft.net> |
| Date: Sat, 10 May 2008 21:11:23 -0700 |
| Subject: [PATCH] sparc: Fix ptrace() detach. |
| |
| From: David S. Miller <davem@davemloft.net> |
| |
| [ Upstream commit: 986bef854fab44012df678a5b51817d5274d3ca1 ] |
| |
| Forever we had a PTRACE_SUNOS_DETACH which was unconditionally |
| recognized, regardless of the personality of the process. |
| |
| Unfortunately, this value is what ended up in the GLIBC sys/ptrace.h |
| header file on sparc as PTRACE_DETACH and PT_DETACH. |
| |
| So continue to recognize this old value. Luckily, it doesn't conflict |
| with anything we actually care about. |
| |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| arch/sparc/kernel/ptrace.c | 2 ++ |
| arch/sparc64/kernel/ptrace.c | 4 ++++ |
| include/asm-sparc/ptrace.h | 1 + |
| include/asm-sparc64/ptrace.h | 1 + |
| 4 files changed, 8 insertions(+) |
| |
| --- a/arch/sparc64/kernel/ptrace.c |
| +++ b/arch/sparc64/kernel/ptrace.c |
| @@ -944,6 +944,8 @@ long compat_arch_ptrace(struct task_stru |
| break; |
| |
| default: |
| + if (request == PTRACE_SPARC_DETACH) |
| + request = PTRACE_DETACH; |
| ret = compat_ptrace_request(child, request, addr, data); |
| break; |
| } |
| @@ -1036,6 +1038,8 @@ long arch_ptrace(struct task_struct *chi |
| break; |
| |
| default: |
| + if (request == PTRACE_SPARC_DETACH) |
| + request = PTRACE_DETACH; |
| ret = ptrace_request(child, request, addr, data); |
| break; |
| } |
| --- a/arch/sparc/kernel/ptrace.c |
| +++ b/arch/sparc/kernel/ptrace.c |
| @@ -441,6 +441,8 @@ long arch_ptrace(struct task_struct *chi |
| break; |
| |
| default: |
| + if (request == PTRACE_SPARC_DETACH) |
| + request = PTRACE_DETACH; |
| ret = ptrace_request(child, request, addr, data); |
| break; |
| } |
| --- a/include/asm-sparc64/ptrace.h |
| +++ b/include/asm-sparc64/ptrace.h |
| @@ -263,6 +263,7 @@ extern void __show_regs(struct pt_regs * |
| #define SF_XXARG 0x5c |
| |
| /* Stuff for the ptrace system call */ |
| +#define PTRACE_SPARC_DETACH 11 |
| #define PTRACE_GETREGS 12 |
| #define PTRACE_SETREGS 13 |
| #define PTRACE_GETFPREGS 14 |
| --- a/include/asm-sparc/ptrace.h |
| +++ b/include/asm-sparc/ptrace.h |
| @@ -149,6 +149,7 @@ extern void show_regs(struct pt_regs *); |
| #define SF_XXARG 0x5c |
| |
| /* Stuff for the ptrace system call */ |
| +#define PTRACE_SPARC_DETACH 11 |
| #define PTRACE_GETREGS 12 |
| #define PTRACE_SETREGS 13 |
| #define PTRACE_GETFPREGS 14 |