Skip to content

Commit

Permalink
x86_64: Fix compat emulation of PTRACE_GET/SET_THREAD_AREA
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Andi Kleen authored and Thomas Gleixner committed Oct 17, 2007
1 parent f68fd5f commit 2f62c94
Showing 1 changed file with 8 additions and 2 deletions.
10 changes: 8 additions & 2 deletions arch/x86/ia32/ptrace32.c
Original file line number Diff line number Diff line change
Expand Up @@ -228,6 +228,8 @@ static long ptrace32_siginfo(unsigned request, u32 pid, u32 addr, u32 data)
return ret;
}

#define COMPAT_GDT_ENTRY_TLS_MIN 6

asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
{
struct task_struct *child;
Expand All @@ -246,8 +248,6 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
case PTRACE_SYSCALL:
case PTRACE_OLDSETOPTIONS:
case PTRACE_SETOPTIONS:
case PTRACE_SET_THREAD_AREA:
case PTRACE_GET_THREAD_AREA:
return sys_ptrace(request, pid, addr, data);

default:
Expand All @@ -271,6 +271,12 @@ asmlinkage long sys32_ptrace(long request, u32 pid, u32 addr, u32 data)
case PTRACE_SETSIGINFO:
case PTRACE_GETSIGINFO:
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);
Expand Down

0 comments on commit 2f62c94

Please sign in to comment.