parisc: Wire up PTRACE_GETREGS/PTRACE_SETREGS for compat case
commit 316f1f42b5cc1d95124c1f0387c867c1ba7b6d0e upstream. Wire up the missing ptrace requests PTRACE_GETREGS, PTRACE_SETREGS, PTRACE_GETFPREGS and PTRACE_SETFPREGS when running 32-bit applications on 64-bit kernels. Signed-off-by: Helge Deller <deller@gmx.de> Cc: stable@vger.kernel.org # 4.7+ Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
2982b473d7
commit
71a4f39f99
@@ -127,6 +127,12 @@ long arch_ptrace(struct task_struct *child, long request,
|
|||||||
unsigned long tmp;
|
unsigned long tmp;
|
||||||
long ret = -EIO;
|
long ret = -EIO;
|
||||||
|
|
||||||
|
unsigned long user_regs_struct_size = sizeof(struct user_regs_struct);
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
|
if (is_compat_task())
|
||||||
|
user_regs_struct_size /= 2;
|
||||||
|
#endif
|
||||||
|
|
||||||
switch (request) {
|
switch (request) {
|
||||||
|
|
||||||
/* Read the word at location addr in the USER area. For ptraced
|
/* Read the word at location addr in the USER area. For ptraced
|
||||||
@@ -182,14 +188,14 @@ long arch_ptrace(struct task_struct *child, long request,
|
|||||||
return copy_regset_to_user(child,
|
return copy_regset_to_user(child,
|
||||||
task_user_regset_view(current),
|
task_user_regset_view(current),
|
||||||
REGSET_GENERAL,
|
REGSET_GENERAL,
|
||||||
0, sizeof(struct user_regs_struct),
|
0, user_regs_struct_size,
|
||||||
datap);
|
datap);
|
||||||
|
|
||||||
case PTRACE_SETREGS: /* Set all gp regs in the child. */
|
case PTRACE_SETREGS: /* Set all gp regs in the child. */
|
||||||
return copy_regset_from_user(child,
|
return copy_regset_from_user(child,
|
||||||
task_user_regset_view(current),
|
task_user_regset_view(current),
|
||||||
REGSET_GENERAL,
|
REGSET_GENERAL,
|
||||||
0, sizeof(struct user_regs_struct),
|
0, user_regs_struct_size,
|
||||||
datap);
|
datap);
|
||||||
|
|
||||||
case PTRACE_GETFPREGS: /* Get the child FPU state. */
|
case PTRACE_GETFPREGS: /* Get the child FPU state. */
|
||||||
@@ -303,6 +309,11 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case PTRACE_GETREGS:
|
||||||
|
case PTRACE_SETREGS:
|
||||||
|
case PTRACE_GETFPREGS:
|
||||||
|
case PTRACE_SETFPREGS:
|
||||||
|
return arch_ptrace(child, request, addr, data);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = compat_ptrace_request(child, request, addr, data);
|
ret = compat_ptrace_request(child, request, addr, data);
|
||||||
|
Reference in New Issue
Block a user