Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c89af52d authored by Helge Deller's avatar Helge Deller Committed by Greg Kroah-Hartman
Browse files

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: default avatarHelge Deller <deller@gmx.de>
Cc: stable@vger.kernel.org # 4.7+
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 8e6cc45b
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -128,6 +128,12 @@ long arch_ptrace(struct task_struct *child, long request,
	unsigned long tmp;
	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) {

	/* Read the word at location addr in the USER area.  For ptraced
@@ -183,14 +189,14 @@ long arch_ptrace(struct task_struct *child, long request,
		return copy_regset_to_user(child,
					   task_user_regset_view(current),
					   REGSET_GENERAL,
					   0, sizeof(struct user_regs_struct),
					   0, user_regs_struct_size,
					   datap);

	case PTRACE_SETREGS:	/* Set all gp regs in the child. */
		return copy_regset_from_user(child,
					     task_user_regset_view(current),
					     REGSET_GENERAL,
					     0, sizeof(struct user_regs_struct),
					     0, user_regs_struct_size,
					     datap);

	case PTRACE_GETFPREGS:	/* Get the child FPU state. */
@@ -304,6 +310,11 @@ long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
			}
		}
		break;
	case PTRACE_GETREGS:
	case PTRACE_SETREGS:
	case PTRACE_GETFPREGS:
	case PTRACE_SETFPREGS:
		return arch_ptrace(child, request, addr, data);

	default:
		ret = compat_ptrace_request(child, request, addr, data);