Commit 2f62c941 authored by Andi Kleen's avatar Andi Kleen Committed by Thomas Gleixner

x86_64: Fix compat emulation of PTRACE_GET/SET_THREAD_AREA

Since the 64bit kernel has different indexes for this TLS segments
the address needs to be adjusted in the ptrace 32bit emulation.

[ tglx: arch/x86 adaptation ]

Reported-by: Amnon Shiloh
Signed-off-by: default avatarAndi Kleen <ak@suse.de>
Signed-off-by: default avatarIngo Molnar <mingo@elte.hu>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
parent f68fd5f4
...@@ -228,6 +228,8 @@ static long ptrace32_siginfo(unsigned request, u32 pid, u32 addr, u32 data) ...@@ -228,6 +228,8 @@ static long ptrace32_siginfo(unsigned request, u32 pid, u32 addr, u32 data)
return ret; return ret;
} }
#define COMPAT_GDT_ENTRY_TLS_MIN 6
asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data) asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
{ {
struct task_struct *child; struct task_struct *child;
...@@ -246,8 +248,6 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data) ...@@ -246,8 +248,6 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
case PTRACE_SYSCALL: case PTRACE_SYSCALL:
case PTRACE_OLDSETOPTIONS: case PTRACE_OLDSETOPTIONS:
case PTRACE_SETOPTIONS: case PTRACE_SETOPTIONS:
case PTRACE_SET_THREAD_AREA:
case PTRACE_GET_THREAD_AREA:
return sys_ptrace(request, pid, addr, data); return sys_ptrace(request, pid, addr, data);
default: default:
...@@ -271,6 +271,12 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data) ...@@ -271,6 +271,12 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
case PTRACE_SETSIGINFO: case PTRACE_SETSIGINFO:
case PTRACE_GETSIGINFO: case PTRACE_GETSIGINFO:
return ptrace32_siginfo(request, pid, addr, data); return ptrace32_siginfo(request, pid, addr, data);
case PTRACE_SET_THREAD_AREA:
case PTRACE_GET_THREAD_AREA:
return sys_ptrace(request, pid,
addr + GDT_ENTRY_TLS_MIN - COMPAT_GDT_ENTRY_TLS_MIN,
data);
} }
child = ptrace_get_task_struct(pid); child = ptrace_get_task_struct(pid);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment