linux/arch
Tejun Heo 8c6fa0a671 ptrace,x86: force IRET path after a ptrace_stop()
commit b9cd18de4d upstream.

The 'sysret' fastpath does not correctly restore even all regular
registers, much less any segment registers or reflags values.  That is
very much part of why it's faster than 'iret'.

Normally that isn't a problem, because the normal ptrace() interface
catches the process using the signal handler infrastructure, which
always returns with an iret.

However, some paths can get caught using ptrace_event() instead of the
signal path, and for those we need to make sure that we aren't going to
return to user space using 'sysret'.  Otherwise the modifications that
may have been done to the register set by the tracer wouldn't
necessarily take effect.

Fix it by forcing IRET path by setting TIF_NOTIFY_RESUME from
arch_ptrace_stop_needed() which is invoked from ptrace_stop().

Signed-off-by: Tejun Heo <tj@kernel.org>
Reported-by: Andy Lutomirski <luto@amacapital.net>
Acked-by: Oleg Nesterov <oleg@redhat.com>
Suggested-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2014-07-06 18:54:15 -07:00
..
alpha Removal of GENERIC_GPIO for v3.10 2013-05-09 09:59:16 -07:00
arc ARC: !PREEMPT: Ensure Return to kernel mode is IRQ safe 2014-05-13 13:59:46 +02:00
arm ARM: 8037/1: mm: support big-endian page tables 2014-06-30 20:09:44 -07:00
arm64 arm64: ptrace: change fs when passing kernel pointer to regset code 2014-06-30 20:09:42 -07:00
avr32 avr32: Makefile: add '-D__linux__' flag for gcc-4.4.7 use 2014-03-06 21:30:02 -08:00
blackfin blackfin updates for Linux 3.10 2013-05-10 07:21:16 -07:00
c6x arch: c6x: mm: include "asm/uaccess.h" to pass compiling 2013-07-21 18:21:29 -07:00
cris cris: media platform drivers: fix build 2013-11-29 11:11:53 -08:00
frv Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2013-05-01 14:08:52 -07:00
h8300 We get rid of the general module prefix confusion with a binary config option, 2013-05-05 10:58:06 -07:00
hexagon Removal of GENERIC_GPIO for v3.10 2013-05-09 09:59:16 -07:00
ia64 exec/ptrace: fix get_dumpable() incorrect tests 2013-11-29 11:11:44 -08:00
m32r Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net-next 2013-05-01 14:08:52 -07:00
m68k m68k: Skip futex_atomic_cmpxchg_inatomic() test 2014-04-14 06:42:19 -07:00
metag metag: Reduce maximum stack size to 256MB 2014-06-07 13:25:38 -07:00
microblaze microblaze: fix clone syscall 2013-08-20 08:43:02 -07:00
mips MIPS: KVM: Fix memory leak on VCPU 2014-07-06 18:54:15 -07:00
mn10300 mn10300: Use early_param() to parse "mem=" parameter 2013-06-28 16:53:03 +01:00
openrisc Removal of GENERIC_GPIO for v3.10 2013-05-09 09:59:16 -07:00
parisc metag: Reduce maximum stack size to 256MB 2014-06-07 13:25:38 -07:00
powerpc powerpc: Add AT_HWCAP2 to indicate V.CRYPTO category support 2014-07-06 18:54:15 -07:00
s390 s390/lowcore: reserve 96 bytes for IRB in lowcore 2014-06-30 20:09:42 -07:00
score score: remove redundant kcore_list entries 2013-05-25 10:27:27 -07:00
sh sh: fix format string bug in stack tracer 2014-05-06 07:55:32 -07:00
sparc net: filter: fix sparc32 typo 2014-06-26 15:12:38 -04:00
tile tile: remove compat_sys_lookup_dcookie declaration to fix compile error 2014-02-13 13:48:00 -08:00
um uml: check length in exitcode_proc_write() 2013-11-13 12:05:33 +09:00
unicore32 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/signal 2013-05-10 09:21:05 -07:00
x86 ptrace,x86: force IRET path after a ptrace_stop() 2014-07-06 18:54:15 -07:00
xtensa xtensa: introduce spill_registers_kernel macro 2014-03-06 21:30:11 -08:00
.gitignore
Kconfig microblaze: fix clone syscall 2013-08-20 08:43:02 -07:00