From: tip-bot for Brian Gerst <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: bp@alien8.de, mingo@kernel.org, luto@amacapital.net,
hpa@zytor.com, peterz@infradead.org,
torvalds@linux-foundation.org, tglx@linutronix.de,
brgerst@gmail.com, linux-kernel@vger.kernel.org,
dvlasenk@redhat.com
Subject: [tip:x86/asm] x86/compat: Factor out ia32 compat code from compat_arch_ptrace()
Date: Mon, 6 Jul 2015 08:47:40 -0700 [thread overview]
Message-ID: <tip-601275c3e04c43b3b34237ab36c27fc1cfb8a189@git.kernel.org> (raw)
In-Reply-To: <1434974121-32575-6-git-send-email-brgerst@gmail.com>
Commit-ID: 601275c3e04c43b3b34237ab36c27fc1cfb8a189
Gitweb: http://git.kernel.org/tip/601275c3e04c43b3b34237ab36c27fc1cfb8a189
Author: Brian Gerst <brgerst@gmail.com>
AuthorDate: Mon, 22 Jun 2015 07:55:14 -0400
Committer: Ingo Molnar <mingo@kernel.org>
CommitDate: Mon, 6 Jul 2015 15:28:56 +0200
x86/compat: Factor out ia32 compat code from compat_arch_ptrace()
Move the ia32-specific code in compat_arch_ptrace() into its
own function.
Signed-off-by: Brian Gerst <brgerst@gmail.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Denys Vlasenko <dvlasenk@redhat.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Thomas Gleixner <tglx@linutronix.de>
Link: http://lkml.kernel.org/r/1434974121-32575-6-git-send-email-brgerst@gmail.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
arch/x86/kernel/ptrace.c | 138 +++++++++++++++++++++++++----------------------
1 file changed, 74 insertions(+), 64 deletions(-)
diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
index 9be72bc..7155957 100644
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -1123,6 +1123,73 @@ static int genregs32_set(struct task_struct *target,
return ret;
}
+static long ia32_arch_ptrace(struct task_struct *child, compat_long_t request,
+ compat_ulong_t caddr, compat_ulong_t cdata)
+{
+ unsigned long addr = caddr;
+ unsigned long data = cdata;
+ void __user *datap = compat_ptr(data);
+ int ret;
+ __u32 val;
+
+ switch (request) {
+ case PTRACE_PEEKUSR:
+ ret = getreg32(child, addr, &val);
+ if (ret == 0)
+ ret = put_user(val, (__u32 __user *)datap);
+ break;
+
+ case PTRACE_POKEUSR:
+ ret = putreg32(child, addr, data);
+ break;
+
+ case PTRACE_GETREGS: /* Get all gp regs from the child. */
+ return copy_regset_to_user(child, &user_x86_32_view,
+ REGSET_GENERAL,
+ 0, sizeof(struct user_regs_struct32),
+ datap);
+
+ case PTRACE_SETREGS: /* Set all gp regs in the child. */
+ return copy_regset_from_user(child, &user_x86_32_view,
+ REGSET_GENERAL, 0,
+ sizeof(struct user_regs_struct32),
+ datap);
+
+ case PTRACE_GETFPREGS: /* Get the child FPU state. */
+ return copy_regset_to_user(child, &user_x86_32_view,
+ REGSET_FP, 0,
+ sizeof(struct user_i387_ia32_struct),
+ datap);
+
+ case PTRACE_SETFPREGS: /* Set the child FPU state. */
+ return copy_regset_from_user(
+ child, &user_x86_32_view, REGSET_FP,
+ 0, sizeof(struct user_i387_ia32_struct), datap);
+
+ case PTRACE_GETFPXREGS: /* Get the child extended FPU state. */
+ return copy_regset_to_user(child, &user_x86_32_view,
+ REGSET_XFP, 0,
+ sizeof(struct user32_fxsr_struct),
+ datap);
+
+ case PTRACE_SETFPXREGS: /* Set the child extended FPU state. */
+ return copy_regset_from_user(child, &user_x86_32_view,
+ REGSET_XFP, 0,
+ sizeof(struct user32_fxsr_struct),
+ datap);
+
+ case PTRACE_GET_THREAD_AREA:
+ case PTRACE_SET_THREAD_AREA:
+ return arch_ptrace(child, request, addr, data);
+
+ default:
+ return compat_ptrace_request(child, request, addr, data);
+ }
+
+ return ret;
+}
+#endif /* CONFIG_IA32_EMULATION */
+
#ifdef CONFIG_X86_X32_ABI
static long x32_arch_ptrace(struct task_struct *child,
compat_long_t request, compat_ulong_t caddr,
@@ -1211,78 +1278,21 @@ static long x32_arch_ptrace(struct task_struct *child,
}
#endif
+#ifdef CONFIG_COMPAT
long compat_arch_ptrace(struct task_struct *child, compat_long_t request,
compat_ulong_t caddr, compat_ulong_t cdata)
{
- unsigned long addr = caddr;
- unsigned long data = cdata;
- void __user *datap = compat_ptr(data);
- int ret;
- __u32 val;
-
#ifdef CONFIG_X86_X32_ABI
if (!is_ia32_task())
return x32_arch_ptrace(child, request, caddr, cdata);
#endif
-
- switch (request) {
- case PTRACE_PEEKUSR:
- ret = getreg32(child, addr, &val);
- if (ret == 0)
- ret = put_user(val, (__u32 __user *)datap);
- break;
-
- case PTRACE_POKEUSR:
- ret = putreg32(child, addr, data);
- break;
-
- case PTRACE_GETREGS: /* Get all gp regs from the child. */
- return copy_regset_to_user(child, &user_x86_32_view,
- REGSET_GENERAL,
- 0, sizeof(struct user_regs_struct32),
- datap);
-
- case PTRACE_SETREGS: /* Set all gp regs in the child. */
- return copy_regset_from_user(child, &user_x86_32_view,
- REGSET_GENERAL, 0,
- sizeof(struct user_regs_struct32),
- datap);
-
- case PTRACE_GETFPREGS: /* Get the child FPU state. */
- return copy_regset_to_user(child, &user_x86_32_view,
- REGSET_FP, 0,
- sizeof(struct user_i387_ia32_struct),
- datap);
-
- case PTRACE_SETFPREGS: /* Set the child FPU state. */
- return copy_regset_from_user(
- child, &user_x86_32_view, REGSET_FP,
- 0, sizeof(struct user_i387_ia32_struct), datap);
-
- case PTRACE_GETFPXREGS: /* Get the child extended FPU state. */
- return copy_regset_to_user(child, &user_x86_32_view,
- REGSET_XFP, 0,
- sizeof(struct user32_fxsr_struct),
- datap);
-
- case PTRACE_SETFPXREGS: /* Set the child extended FPU state. */
- return copy_regset_from_user(child, &user_x86_32_view,
- REGSET_XFP, 0,
- sizeof(struct user32_fxsr_struct),
- datap);
-
- case PTRACE_GET_THREAD_AREA:
- case PTRACE_SET_THREAD_AREA:
- return arch_ptrace(child, request, addr, data);
-
- default:
- return compat_ptrace_request(child, request, addr, data);
- }
-
- return ret;
+#ifdef CONFIG_IA32_EMULATION
+ return ia32_arch_ptrace(child, request, caddr, cdata);
+#else
+ return 0;
+#endif
}
-
-#endif /* CONFIG_IA32_EMULATION */
+#endif /* CONFIG_COMPAT */
#ifdef CONFIG_X86_64
next prev parent reply other threads:[~2015-07-06 15:48 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-06-22 11:55 [PATCH 00/12] x86/compat: Separate X32 from 32-bit compat Brian Gerst
2015-06-22 11:55 ` [PATCH 01/12] x86/compat: Move copy_siginfo_*_user32() to signal_compat.c Brian Gerst
2015-07-06 15:46 ` [tip:x86/asm] " tip-bot for Brian Gerst
2015-06-22 11:55 ` [PATCH 02/12] x86/compat: Make mmap_is_ia32() common compat Brian Gerst
2015-07-06 15:46 ` [tip:x86/asm] " tip-bot for Brian Gerst
2015-06-22 11:55 ` [PATCH 03/12] x86/compat: Move ucontext_x32 to sigframe.h Brian Gerst
2015-07-06 15:47 ` [tip:x86/asm] " tip-bot for Brian Gerst
2015-06-22 11:55 ` [PATCH 04/12] x86/compat: Rename start_thread_ia32 to compat_start_thread Brian Gerst
2015-07-06 15:47 ` [tip:x86/asm] x86/compat: Rename 'start_thread_ia32' to ' compat_start_thread' tip-bot for Brian Gerst
2015-06-22 11:55 ` [PATCH 05/12] x86/compat: Move ia32 compat code from compat_arch_ptrace() Brian Gerst
2015-07-06 15:47 ` tip-bot for Brian Gerst [this message]
2015-06-22 11:55 ` [PATCH 06/12] x86/compat: Don't build 32-bit vdso if not needed Brian Gerst
2015-07-06 15:48 ` [tip:x86/asm] x86/compat: Don' t build the 32-bit VDSO " tip-bot for Brian Gerst
2015-06-22 11:55 ` [PATCH 07/12] x86/compat: get_gate_vma should check for both 32-bit compat and x32 Brian Gerst
2015-06-22 16:19 ` Andy Lutomirski
2015-06-22 17:05 ` Brian Gerst
2015-06-22 17:12 ` Andy Lutomirski
2015-07-06 15:48 ` [tip:x86/asm] x86/compat: Check for both 32-bit compat and x32 in get_gate_vma() tip-bot for Brian Gerst
2015-06-22 11:55 ` [PATCH 08/12] x86/compat/perf: perf_callchain_user32 is only for 32-bit compat Brian Gerst
2015-07-06 15:48 ` [tip:x86/asm] x86/compat, x86/perf: Don' t build perf_callchain_user32() on x32 tip-bot for Brian Gerst
2015-06-22 11:55 ` [PATCH 09/12] x86/compat: Remove unneeded include Brian Gerst
2015-07-06 15:49 ` [tip:x86/asm] x86/compat: Remove unneeded #include tip-bot for Brian Gerst
2015-06-22 11:55 ` [PATCH 10/12] x86/compat: define ARCH_WANT_OLD_COMPAT_IPC only for 32-bit compat Brian Gerst
2015-07-06 15:49 ` [tip:x86/asm] x86/compat: Define " tip-bot for Brian Gerst
2015-06-22 11:55 ` [PATCH 11/12] x86/compat: clean up HAVE_UID16 config Brian Gerst
2015-07-06 15:49 ` [tip:x86/asm] x86/compat: Clean " tip-bot for Brian Gerst
2015-06-22 11:55 ` [PATCH 12/12] x86/compat: Separate ia32 and x32 compat ABIs Brian Gerst
2015-07-06 15:50 ` [tip:x86/asm] " tip-bot for Brian Gerst
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-601275c3e04c43b3b34237ab36c27fc1cfb8a189@git.kernel.org \
--to=tipbot@zytor.com \
--cc=bp@alien8.de \
--cc=brgerst@gmail.com \
--cc=dvlasenk@redhat.com \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=luto@amacapital.net \
--cc=mingo@kernel.org \
--cc=peterz@infradead.org \
--cc=tglx@linutronix.de \
--cc=torvalds@linux-foundation.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome