aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDenys Vlasenko <dvlasenk@redhat.com>2015-06-09 14:54:08 -0400
committerIngo Molnar <mingo@kernel.org>2015-06-10 02:42:13 -0400
commit1536bb46fac7672ef04aaaa6a3b07848314263bc (patch)
tree374654346281c1a2787852bed4d54cf06b03878f
parentaee4b013a71666f11ffeac11ab45bb7c6e0e394d (diff)
x86/asm/entry/32: Explain reloading of registers after __audit_syscall_entry()
Here it is not obvious why we load pt_regs->cx to %esi etc. Lets improve comments. Explain that here we combine two things: first, we reload registers since some of them are clobbered by the C function we just called; and we also convert 32-bit syscall params to 64-bit C ABI, because we are going to jump back to syscall dispatch code. Move reloading of 6th argument into the macro instead of having it after each of two macro invocations. No actual code changes here. Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com> Cc: Alexei Starovoitov <ast@plumgrid.com> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Andy Lutomirski <luto@amacapital.net> Cc: Borislav Petkov <bp@alien8.de> 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: Peter Zijlstra <peterz@infradead.org> Cc: Steven Rostedt <rostedt@goodmis.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Will Drewry <wad@chromium.org> Link: http://lkml.kernel.org/r/1433876051-26604-2-git-send-email-dvlasenk@redhat.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
-rw-r--r--arch/x86/entry/entry_64_compat.S20
1 files changed, 12 insertions, 8 deletions
diff --git a/arch/x86/entry/entry_64_compat.S b/arch/x86/entry/entry_64_compat.S
index 2c44180d2fac..0fa108cdf182 100644
--- a/arch/x86/entry/entry_64_compat.S
+++ b/arch/x86/entry/entry_64_compat.S
@@ -185,12 +185,18 @@ sysexit_from_sys_call:
185 movl %ebx, %esi /* 2nd arg: 1st syscall arg */ 185 movl %ebx, %esi /* 2nd arg: 1st syscall arg */
186 movl %eax, %edi /* 1st arg: syscall number */ 186 movl %eax, %edi /* 1st arg: syscall number */
187 call __audit_syscall_entry 187 call __audit_syscall_entry
188 movl ORIG_RAX(%rsp), %eax /* reload syscall number */ 188 /*
189 movl %ebx, %edi /* reload 1st syscall arg */ 189 * We are going to jump back to syscall dispatch.
190 movl RCX(%rsp), %esi /* reload 2nd syscall arg */ 190 * Prepare syscall args as required by 64-bit C ABI.
191 movl RDX(%rsp), %edx /* reload 3rd syscall arg */ 191 * Clobbered registers are loaded from pt_regs on stack.
192 movl RSI(%rsp), %ecx /* reload 4th syscall arg */ 192 */
193 movl RDI(%rsp), %r8d /* reload 5th syscall arg */ 193 movl ORIG_RAX(%rsp), %eax /* syscall number */
194 movl %ebx, %edi /* arg1 */
195 movl RCX(%rsp), %esi /* arg2 */
196 movl RDX(%rsp), %edx /* arg3 */
197 movl RSI(%rsp), %ecx /* arg4 */
198 movl RDI(%rsp), %r8d /* arg5 */
199 movl %ebp, %r9d /* arg6 */
194 .endm 200 .endm
195 201
196 .macro auditsys_exit exit 202 .macro auditsys_exit exit
@@ -221,7 +227,6 @@ sysexit_from_sys_call:
221 227
222sysenter_auditsys: 228sysenter_auditsys:
223 auditsys_entry_common 229 auditsys_entry_common
224 movl %ebp, %r9d /* reload 6th syscall arg */
225 jmp sysenter_dispatch 230 jmp sysenter_dispatch
226 231
227sysexit_audit: 232sysexit_audit:
@@ -379,7 +384,6 @@ sysretl_from_sys_call:
379#ifdef CONFIG_AUDITSYSCALL 384#ifdef CONFIG_AUDITSYSCALL
380cstar_auditsys: 385cstar_auditsys:
381 auditsys_entry_common 386 auditsys_entry_common
382 movl %ebp, %r9d /* reload 6th syscall arg */
383 jmp cstar_dispatch 387 jmp cstar_dispatch
384 388
385sysretl_audit: 389sysretl_audit: