All of lore.kernel.org
 help / color / mirror / Atom feed
From: Dmitry Safonov <dsafonov@virtuozzo.com>
To: linux-kernel@vger.kernel.org
Cc: 0x7f454c46@gmail.com, linux-mm@kvack.org, mingo@redhat.com,
	luto@amacapital.net, gorcunov@openvz.org, xemul@virtuozzo.com,
	oleg@redhat.com, Dmitry Safonov <dsafonov@virtuozzo.com>,
	Andy Lutomirski <luto@kernel.org>,
	x86@kernel.org
Subject: [PATCHv2 5/6] x86/ptrace: down with test_thread_flag(TIF_IA32)
Date: Wed, 29 Jun 2016 13:57:35 +0300	[thread overview]
Message-ID: <20160629105736.15017-6-dsafonov@virtuozzo.com> (raw)
In-Reply-To: <20160629105736.15017-1-dsafonov@virtuozzo.com>

As the task isn't executing at the moment of {GET,SET}REGS,
return regset that corresponds to code selector, rather than
value of TIF_IA32 flag.
I.e. if we ptrace i386 elf binary that has just changed it's
code selector to __USER_CS, than GET_REGS will return
full x86_64 register set.

Note, that this will work only if application has changed it's CS.
If the application does 32-bit syscall with __USER_CS, ptrace
will still return 64-bit register set. Which might be still confusing
for tools that expect TS_COMPACT to be exposed [1, 2].

So this this change should make PTRACE_GETREGSET more reliable and
this will be another step to drop TIF_{IA32,X32} flags.

[1]: https://sourceforge.net/p/strace/mailman/message/30471411/
[2]: https://lkml.org/lkml/2012/1/18/320

Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Cyrill Gorcunov <gorcunov@openvz.org>
Cc: Pavel Emelyanov <xemul@virtuozzo.com>
Cc: x86@kernel.org
Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
---
 arch/x86/kernel/ptrace.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
index 600edd225e81..a2612d06cf4b 100644
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -1355,7 +1355,7 @@ void update_regset_xstate_info(unsigned int size, u64 xstate_mask)
 const struct user_regset_view *task_user_regset_view(struct task_struct *task)
 {
 #ifdef CONFIG_IA32_EMULATION
-	if (test_tsk_thread_flag(task, TIF_IA32))
+	if (!user_64bit_mode(task_pt_regs(task)))
 #endif
 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
 		return &user_x86_32_view;
-- 
2.9.0

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>

WARNING: multiple messages have this Message-ID (diff)
From: Dmitry Safonov <dsafonov@virtuozzo.com>
To: <linux-kernel@vger.kernel.org>
Cc: <0x7f454c46@gmail.com>, <linux-mm@kvack.org>, <mingo@redhat.com>,
	<luto@amacapital.net>, <gorcunov@openvz.org>,
	<xemul@virtuozzo.com>, <oleg@redhat.com>,
	Dmitry Safonov <dsafonov@virtuozzo.com>,
	Andy Lutomirski <luto@kernel.org>, <x86@kernel.org>
Subject: [PATCHv2 5/6] x86/ptrace: down with test_thread_flag(TIF_IA32)
Date: Wed, 29 Jun 2016 13:57:35 +0300	[thread overview]
Message-ID: <20160629105736.15017-6-dsafonov@virtuozzo.com> (raw)
In-Reply-To: <20160629105736.15017-1-dsafonov@virtuozzo.com>

As the task isn't executing at the moment of {GET,SET}REGS,
return regset that corresponds to code selector, rather than
value of TIF_IA32 flag.
I.e. if we ptrace i386 elf binary that has just changed it's
code selector to __USER_CS, than GET_REGS will return
full x86_64 register set.

Note, that this will work only if application has changed it's CS.
If the application does 32-bit syscall with __USER_CS, ptrace
will still return 64-bit register set. Which might be still confusing
for tools that expect TS_COMPACT to be exposed [1, 2].

So this this change should make PTRACE_GETREGSET more reliable and
this will be another step to drop TIF_{IA32,X32} flags.

[1]: https://sourceforge.net/p/strace/mailman/message/30471411/
[2]: https://lkml.org/lkml/2012/1/18/320

Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Andy Lutomirski <luto@kernel.org>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Cyrill Gorcunov <gorcunov@openvz.org>
Cc: Pavel Emelyanov <xemul@virtuozzo.com>
Cc: x86@kernel.org
Signed-off-by: Dmitry Safonov <dsafonov@virtuozzo.com>
---
 arch/x86/kernel/ptrace.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/x86/kernel/ptrace.c b/arch/x86/kernel/ptrace.c
index 600edd225e81..a2612d06cf4b 100644
--- a/arch/x86/kernel/ptrace.c
+++ b/arch/x86/kernel/ptrace.c
@@ -1355,7 +1355,7 @@ void update_regset_xstate_info(unsigned int size, u64 xstate_mask)
 const struct user_regset_view *task_user_regset_view(struct task_struct *task)
 {
 #ifdef CONFIG_IA32_EMULATION
-	if (test_tsk_thread_flag(task, TIF_IA32))
+	if (!user_64bit_mode(task_pt_regs(task)))
 #endif
 #if defined CONFIG_X86_32 || defined CONFIG_IA32_EMULATION
 		return &user_x86_32_view;
-- 
2.9.0

  parent reply	other threads:[~2016-06-29 10:59 UTC|newest]

Thread overview: 43+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-29 10:57 [PATCHv2 0/6] x86: 32-bit compatible C/R on x86_64 Dmitry Safonov
2016-06-29 10:57 ` Dmitry Safonov
2016-06-29 10:57 ` [PATCHv2 1/6] x86/vdso: unmap vdso blob on vvar mapping failure Dmitry Safonov
2016-06-29 10:57   ` Dmitry Safonov
2016-07-06 14:16   ` Andy Lutomirski
2016-07-06 14:16     ` Andy Lutomirski
2016-06-29 10:57 ` [PATCHv2 2/6] x86/vdso: introduce do_map_vdso() and vdso_type enum Dmitry Safonov
2016-06-29 10:57   ` Dmitry Safonov
2016-07-06 14:21   ` Andy Lutomirski
2016-07-06 14:21     ` Andy Lutomirski
2016-07-07 11:04     ` Dmitry Safonov
2016-07-07 11:04       ` Dmitry Safonov
2016-06-29 10:57 ` [PATCHv2 3/6] x86/arch_prctl/vdso: add ARCH_MAP_VDSO_* Dmitry Safonov
2016-06-29 10:57   ` Dmitry Safonov
2016-07-06 14:30   ` Andy Lutomirski
2016-07-06 14:30     ` Andy Lutomirski
2016-07-07 11:11     ` Dmitry Safonov
2016-07-07 11:11       ` Dmitry Safonov
2016-07-10 12:44       ` Andy Lutomirski
2016-07-10 12:44         ` Andy Lutomirski
2016-07-11 18:26         ` Oleg Nesterov
2016-07-11 18:26           ` Oleg Nesterov
2016-07-11 18:28           ` Andy Lutomirski
2016-07-11 18:28             ` Andy Lutomirski
2016-07-12 14:14             ` Oleg Nesterov
2016-07-12 14:14               ` Oleg Nesterov
2016-08-02 10:59               ` Dmitry Safonov
2016-08-02 10:59                 ` Dmitry Safonov
2016-08-10  8:35                 ` Andy Lutomirski
2016-08-10  8:35                   ` Andy Lutomirski
2016-08-10 10:49                   ` Dmitry Safonov
2016-08-10 10:49                     ` Dmitry Safonov
2016-06-29 10:57 ` [PATCHv2 4/6] x86/coredump: use pr_reg size, rather that TIF_IA32 flag Dmitry Safonov
2016-06-29 10:57   ` Dmitry Safonov
2016-06-29 10:57   ` Dmitry Safonov
2016-06-29 10:57 ` Dmitry Safonov [this message]
2016-06-29 10:57   ` [PATCHv2 5/6] x86/ptrace: down with test_thread_flag(TIF_IA32) Dmitry Safonov
2016-07-06 14:32   ` Andy Lutomirski
2016-07-06 14:32     ` Andy Lutomirski
2016-06-29 10:57 ` [PATCHv2 6/6] x86/signal: add SA_{X32,IA32}_ABI sa_flags Dmitry Safonov
2016-06-29 10:57   ` Dmitry Safonov
2016-07-06 14:36   ` Andy Lutomirski
2016-07-06 14:36     ` Andy Lutomirski

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=20160629105736.15017-6-dsafonov@virtuozzo.com \
    --to=dsafonov@virtuozzo.com \
    --cc=0x7f454c46@gmail.com \
    --cc=gorcunov@openvz.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-mm@kvack.org \
    --cc=luto@amacapital.net \
    --cc=luto@kernel.org \
    --cc=mingo@redhat.com \
    --cc=oleg@redhat.com \
    --cc=x86@kernel.org \
    --cc=xemul@virtuozzo.com \
    /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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.