lists.openwall.net | lists / announce owl-users owl-dev john-users john-dev passwdqc-users yescrypt popa3d-users / oss-security kernel-hardening musl sabotage tlsify passwords / crypt-dev xvendor / Bugtraq Full-Disclosure linux-kernel linux-netdev linux-ext4 linux-hardening linux-cve-announce PHC | |
Open Source and information security mailing list archives
| ||
|
Date: Fri, 26 Aug 2016 20:13:16 +0300 From: Dmitry Safonov <dsafonov@...tuozzo.com> To: <linux-kernel@...r.kernel.org> CC: <0x7f454c46@...il.com>, <luto@...nel.org>, <oleg@...hat.com>, <tglx@...utronix.de>, <hpa@...or.com>, <mingo@...hat.com>, <linux-mm@...ck.org>, <x86@...nel.org>, <gorcunov@...nvz.org>, <xemul@...tuozzo.com>, Dmitry Safonov <dsafonov@...tuozzo.com>, Pedro Alves <palves@...hat.com> Subject: [PATCHv3 5/6] x86/ptrace: down with test_thread_flag(TIF_IA32) 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: Andy Lutomirski <luto@...nel.org> Cc: Oleg Nesterov <oleg@...hat.com> Cc: Pedro Alves <palves@...hat.com> Cc: Thomas Gleixner <tglx@...utronix.de> Cc: "H. Peter Anvin" <hpa@...or.com> Cc: Ingo Molnar <mingo@...hat.com> Cc: linux-mm@...ck.org Cc: x86@...nel.org Cc: Cyrill Gorcunov <gorcunov@...nvz.org> Cc: Pavel Emelyanov <xemul@...tuozzo.com> Signed-off-by: Dmitry Safonov <dsafonov@...tuozzo.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 f79576a541ff..ad0bab8fc594 100644 --- a/arch/x86/kernel/ptrace.c +++ b/arch/x86/kernel/ptrace.c @@ -1358,7 +1358,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
Powered by blists - more mailing lists