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: Andi Kleen <ak@suse.de> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
f68fd5f480
commit
2f62c94176
1 changed files with 8 additions and 2 deletions
|
@ -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)
|
||||||
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)
|
||||||
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);
|
||||||
|
|
Loading…
Add table
Reference in a new issue