]> git.baikalelectronics.ru Git - kernel.git/commit
x86/asm/entry/64: Enable interrupts *after* we fetch PER_CPU_VAR(old_rsp)
authorDenys Vlasenko <dvlasenk@redhat.com>
Tue, 17 Mar 2015 13:52:24 +0000 (14:52 +0100)
committerIngo Molnar <mingo@kernel.org>
Tue, 17 Mar 2015 15:01:40 +0000 (16:01 +0100)
commit3a9cedbfc10fcad2674c924422c365a7ae1b8c7b
tree4cefb59f4ec2913069f94d8a6b1398637f39752d
parentfbd8c062d41eae04215fe17bb8125a110500731b
x86/asm/entry/64: Enable interrupts *after* we fetch PER_CPU_VAR(old_rsp)

We want to use PER_CPU_VAR(old_rsp) as a simple temporary register,
to shuffle user-space RSP into (and from) when we set up the system
call stack frame. At that point we cannot shuffle values into general
purpose registers, because we have not saved them yet.

To be able to do this shuffling into a memory location, we must be
atomic and must not be preempted while we do the shuffling, otherwise
the 'temporary' register gets overwritten by some other task's
temporary register contents ...

Tested-by: Borislav Petkov <bp@alien8.de>
Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Acked-by: Borislav Petkov <bp@alien8.de>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Kees Cook <keescook@chromium.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Oleg Nesterov <oleg@redhat.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
Cc: Will Drewry <wad@chromium.org>
Link: http://lkml.kernel.org/r/1426600344-8254-1-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
arch/x86/kernel/entry_64.S