linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/8] x86/asm/entry/64: Use common code for rt_sigreturn epilogue
@ 2015-04-07 20:43 Denys Vlasenko
  2015-04-07 20:43 ` [PATCH 2/8] x86/asm/entry/64: Move stub_x32_execve[at] closer to stub_execveat Denys Vlasenko
                   ` (7 more replies)
  0 siblings, 8 replies; 17+ messages in thread
From: Denys Vlasenko @ 2015-04-07 20:43 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Denys Vlasenko, Linus Torvalds, Steven Rostedt, Borislav Petkov,
	H. Peter Anvin, Andy Lutomirski, Oleg Nesterov,
	Frederic Weisbecker, Alexei Starovoitov, Will Drewry, Kees Cook,
	x86, linux-kernel

Similarly to stub_execve, we can reuse the epilogue in stub_rt_sigreturn
and stub_x32_rt_sigreturn.

Add a comment explaining why we can't eliminage SAVE_EXTRA_REGS here.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
CC: Linus Torvalds <torvalds@linux-foundation.org>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Ingo Molnar <mingo@kernel.org>
CC: Borislav Petkov <bp@alien8.de>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: Andy Lutomirski <luto@amacapital.net>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Frederic Weisbecker <fweisbec@gmail.com>
CC: Alexei Starovoitov <ast@plumgrid.com>
CC: Will Drewry <wad@chromium.org>
CC: Kees Cook <keescook@chromium.org>
CC: x86@kernel.org
CC: linux-kernel@vger.kernel.org
---
 arch/x86/kernel/entry_64.S | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 15261ba..994f3cb 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -450,12 +450,21 @@ END(stub_execveat)
  */
 ENTRY(stub_rt_sigreturn)
 	CFI_STARTPROC
-	addq $8, %rsp
-	DEFAULT_FRAME 0
-	SAVE_EXTRA_REGS
+	DEFAULT_FRAME 0, 8
+	/*
+	 * SAVE_EXTRA_REGS result is not normally needed:
+	 * sigreturn overwrites all pt_regs->GPREGS.
+	 * But sigreturn can fail (!), and there is no easy way to detect that.
+	 * To make sure RESTORE_EXTRA_REGS doesn't restore garbage on error,
+	 * we SAVE_EXTRA_REGS here.
+	 */
+	SAVE_EXTRA_REGS 8
 	call sys_rt_sigreturn
-	movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer
+return_from_stub:
+	addq	$8, %rsp
+	CFI_ADJUST_CFA_OFFSET -8
 	RESTORE_EXTRA_REGS
+	movq %rax,RAX(%rsp)
 	jmp int_ret_from_sys_call
 	CFI_ENDPROC
 END(stub_rt_sigreturn)
@@ -463,13 +472,10 @@ END(stub_rt_sigreturn)
 #ifdef CONFIG_X86_X32_ABI
 ENTRY(stub_x32_rt_sigreturn)
 	CFI_STARTPROC
-	addq $8, %rsp
-	DEFAULT_FRAME 0
-	SAVE_EXTRA_REGS
+	DEFAULT_FRAME 0, 8
+	SAVE_EXTRA_REGS 8
 	call sys32_x32_rt_sigreturn
-	movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer
-	RESTORE_EXTRA_REGS
-	jmp int_ret_from_sys_call
+	jmp  return_from_stub
 	CFI_ENDPROC
 END(stub_x32_rt_sigreturn)
 
-- 
1.8.1.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 2/8] x86/asm/entry/64: Move stub_x32_execve[at] closer to stub_execveat
  2015-04-07 20:43 [PATCH 1/8] x86/asm/entry/64: Use common code for rt_sigreturn epilogue Denys Vlasenko
@ 2015-04-07 20:43 ` Denys Vlasenko
  2015-04-09  9:02   ` [tip:x86/asm] x86/asm/entry/64: Move stub_x32_execvecloser() to stub_execveat() tip-bot for Denys Vlasenko
  2015-04-07 20:43 ` [PATCH 3/8] x86/asm/entry: Zero EXTRA_REGS for stub32_execve[at] too Denys Vlasenko
                   ` (6 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Denys Vlasenko @ 2015-04-07 20:43 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Denys Vlasenko, Linus Torvalds, Steven Rostedt, Borislav Petkov,
	H. Peter Anvin, Andy Lutomirski, Oleg Nesterov,
	Frederic Weisbecker, Alexei Starovoitov, Will Drewry, Kees Cook,
	x86, linux-kernel

This is a preparatory patch for moving stub32_execve[at] to this file.
It makes sense to have all execve stubs in one place, so that they can reuse code.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
CC: Linus Torvalds <torvalds@linux-foundation.org>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Ingo Molnar <mingo@kernel.org>
CC: Borislav Petkov <bp@alien8.de>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: Andy Lutomirski <luto@amacapital.net>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Frederic Weisbecker <fweisbec@gmail.com>
CC: Alexei Starovoitov <ast@plumgrid.com>
CC: Will Drewry <wad@chromium.org>
CC: Kees Cook <keescook@chromium.org>
CC: x86@kernel.org
CC: linux-kernel@vger.kernel.org
---
 arch/x86/kernel/entry_64.S | 34 +++++++++++++++++-----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 994f3cb..1b0793c 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -444,6 +444,23 @@ ENTRY(stub_execveat)
 	CFI_ENDPROC
 END(stub_execveat)
 
+#ifdef CONFIG_X86_X32_ABI
+ENTRY(stub_x32_execve)
+	CFI_STARTPROC
+	DEFAULT_FRAME 0, 8
+	call	compat_sys_execve
+	jmp	return_from_execve
+	CFI_ENDPROC
+END(stub_x32_execve)
+ENTRY(stub_x32_execveat)
+	CFI_STARTPROC
+	DEFAULT_FRAME 0, 8
+	call	compat_sys_execveat
+	jmp	return_from_execve
+	CFI_ENDPROC
+END(stub_x32_execveat)
+#endif
+
 /*
  * sigreturn is special because it needs to restore all registers on return.
  * This cannot be done with SYSRET, so use the IRET return path instead.
@@ -478,23 +495,6 @@ ENTRY(stub_x32_rt_sigreturn)
 	jmp  return_from_stub
 	CFI_ENDPROC
 END(stub_x32_rt_sigreturn)
-
-ENTRY(stub_x32_execve)
-	CFI_STARTPROC
-	DEFAULT_FRAME 0, 8
-	call	compat_sys_execve
-	jmp	return_from_execve
-	CFI_ENDPROC
-END(stub_x32_execve)
-
-ENTRY(stub_x32_execveat)
-	CFI_STARTPROC
-	DEFAULT_FRAME 0, 8
-	call	compat_sys_execveat
-	jmp	return_from_execve
-	CFI_ENDPROC
-END(stub_x32_execveat)
-
 #endif
 
 /*
-- 
1.8.1.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 3/8] x86/asm/entry: Zero EXTRA_REGS for stub32_execve[at] too
  2015-04-07 20:43 [PATCH 1/8] x86/asm/entry/64: Use common code for rt_sigreturn epilogue Denys Vlasenko
  2015-04-07 20:43 ` [PATCH 2/8] x86/asm/entry/64: Move stub_x32_execve[at] closer to stub_execveat Denys Vlasenko
@ 2015-04-07 20:43 ` Denys Vlasenko
  2015-04-08  2:39   ` Brian Gerst
  2015-04-09  9:02   ` [tip:x86/asm] x86/asm/entry: Zero EXTRA_REGS for stub32_execve() too tip-bot for Denys Vlasenko
  2015-04-07 20:43 ` [PATCH 4/8] x86/asm/entry/64: optimize [v]fork/clone stubs Denys Vlasenko
                   ` (5 subsequent siblings)
  7 siblings, 2 replies; 17+ messages in thread
From: Denys Vlasenko @ 2015-04-07 20:43 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Denys Vlasenko, Linus Torvalds, Steven Rostedt, Borislav Petkov,
	H. Peter Anvin, Andy Lutomirski, Oleg Nesterov,
	Frederic Weisbecker, Alexei Starovoitov, Will Drewry, Kees Cook,
	x86, linux-kernel

The change which affected how execve clears EXTRA_REGS missed
32-bit execve syscalls.

Fix this by using 64-bit execve stub epilogue for them too.

Run-tested.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
CC: Linus Torvalds <torvalds@linux-foundation.org>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Ingo Molnar <mingo@kernel.org>
CC: Borislav Petkov <bp@alien8.de>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: Andy Lutomirski <luto@amacapital.net>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Frederic Weisbecker <fweisbec@gmail.com>
CC: Alexei Starovoitov <ast@plumgrid.com>
CC: Will Drewry <wad@chromium.org>
CC: Kees Cook <keescook@chromium.org>
CC: x86@kernel.org
CC: linux-kernel@vger.kernel.org
---
 arch/x86/ia32/ia32entry.S  |  2 --
 arch/x86/kernel/entry_64.S | 15 +++++++++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S
index 5d8f987..a821b1c 100644
--- a/arch/x86/ia32/ia32entry.S
+++ b/arch/x86/ia32/ia32entry.S
@@ -571,8 +571,6 @@ GLOBAL(\label)
 
 	PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn
 	PTREGSCALL stub32_sigreturn, sys32_sigreturn
-	PTREGSCALL stub32_execve, compat_sys_execve
-	PTREGSCALL stub32_execveat, compat_sys_execveat
 	PTREGSCALL stub32_fork, sys_fork
 	PTREGSCALL stub32_vfork, sys_vfork
 
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 1b0793c..8e3ba38 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -461,6 +461,21 @@ ENTRY(stub_x32_execveat)
 END(stub_x32_execveat)
 #endif
 
+#ifdef CONFIG_IA32_EMULATION
+ENTRY(stub32_execve)
+	CFI_STARTPROC
+	call	compat_sys_execve
+	jmp	return_from_execve
+	CFI_ENDPROC
+END(stub32_execve)
+ENTRY(stub32_execveat)
+	CFI_STARTPROC
+	call	compat_sys_execveat
+	jmp	return_from_execve
+	CFI_ENDPROC
+END(stub32_execveat)
+#endif
+
 /*
  * sigreturn is special because it needs to restore all registers on return.
  * This cannot be done with SYSRET, so use the IRET return path instead.
-- 
1.8.1.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 4/8] x86/asm/entry/64: optimize [v]fork/clone stubs
  2015-04-07 20:43 [PATCH 1/8] x86/asm/entry/64: Use common code for rt_sigreturn epilogue Denys Vlasenko
  2015-04-07 20:43 ` [PATCH 2/8] x86/asm/entry/64: Move stub_x32_execve[at] closer to stub_execveat Denys Vlasenko
  2015-04-07 20:43 ` [PATCH 3/8] x86/asm/entry: Zero EXTRA_REGS for stub32_execve[at] too Denys Vlasenko
@ 2015-04-07 20:43 ` Denys Vlasenko
  2015-04-09  9:02   ` [tip:x86/asm] x86/asm/entry/64: Optimize " tip-bot for Denys Vlasenko
  2015-04-07 20:43 ` [PATCH 5/8] x86/asm/entry/64: remove a redundant jump Denys Vlasenko
                   ` (4 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Denys Vlasenko @ 2015-04-07 20:43 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Denys Vlasenko, Linus Torvalds, Steven Rostedt, Borislav Petkov,
	H. Peter Anvin, Andy Lutomirski, Oleg Nesterov,
	Frederic Weisbecker, Alexei Starovoitov, Will Drewry, Kees Cook,
	x86, linux-kernel

Replace "call func; ret" with "jmp func".

Run-tested.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
CC: Linus Torvalds <torvalds@linux-foundation.org>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Ingo Molnar <mingo@kernel.org>
CC: Borislav Petkov <bp@alien8.de>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: Andy Lutomirski <luto@amacapital.net>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Frederic Weisbecker <fweisbec@gmail.com>
CC: Alexei Starovoitov <ast@plumgrid.com>
CC: Will Drewry <wad@chromium.org>
CC: Kees Cook <keescook@chromium.org>
CC: x86@kernel.org
CC: linux-kernel@vger.kernel.org
---
 arch/x86/kernel/entry_64.S | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 8e3ba38..6ad30a7 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -407,8 +407,7 @@ ENTRY(stub_\func)
 	CFI_STARTPROC
 	DEFAULT_FRAME 0, 8		/* offset 8: return address */
 	SAVE_EXTRA_REGS 8
-	call sys_\func
-	ret
+	jmp sys_\func
 	CFI_ENDPROC
 END(stub_\func)
 	.endm
-- 
1.8.1.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 5/8] x86/asm/entry/64: remove a redundant jump
  2015-04-07 20:43 [PATCH 1/8] x86/asm/entry/64: Use common code for rt_sigreturn epilogue Denys Vlasenko
                   ` (2 preceding siblings ...)
  2015-04-07 20:43 ` [PATCH 4/8] x86/asm/entry/64: optimize [v]fork/clone stubs Denys Vlasenko
@ 2015-04-07 20:43 ` Denys Vlasenko
  2015-04-09  9:03   ` [tip:x86/asm] x86/asm/entry/64: Remove " tip-bot for Denys Vlasenko
  2015-04-07 20:43 ` [PATCH 6/8] x86/asm/entry/64: simplify jumps in ret_from_fork Denys Vlasenko
                   ` (3 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Denys Vlasenko @ 2015-04-07 20:43 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Denys Vlasenko, Linus Torvalds, Steven Rostedt, Borislav Petkov,
	H. Peter Anvin, Andy Lutomirski, Oleg Nesterov,
	Frederic Weisbecker, Alexei Starovoitov, Will Drewry, Kees Cook,
	x86, linux-kernel

Jumping to the very next instruction is not very useful:

        jmp label
    label:

Removing the jump.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
CC: Linus Torvalds <torvalds@linux-foundation.org>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Ingo Molnar <mingo@kernel.org>
CC: Borislav Petkov <bp@alien8.de>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: Andy Lutomirski <luto@amacapital.net>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Frederic Weisbecker <fweisbec@gmail.com>
CC: Alexei Starovoitov <ast@plumgrid.com>
CC: Will Drewry <wad@chromium.org>
CC: Kees Cook <keescook@chromium.org>
CC: x86@kernel.org
CC: linux-kernel@vger.kernel.org
---
 arch/x86/kernel/entry_64.S | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 6ad30a7..7d4c7c6 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -1455,7 +1455,6 @@ ENTRY(nmi)
 	/* If it is below the NMI stack, it is a normal NMI */
 	jb	first_nmi
 	/* Ah, it is within the NMI stack, treat it as nested */
-	jmp	nested_nmi
 
 	CFI_REMEMBER_STATE
 
-- 
1.8.1.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 6/8] x86/asm/entry/64: simplify jumps in ret_from_fork
  2015-04-07 20:43 [PATCH 1/8] x86/asm/entry/64: Use common code for rt_sigreturn epilogue Denys Vlasenko
                   ` (3 preceding siblings ...)
  2015-04-07 20:43 ` [PATCH 5/8] x86/asm/entry/64: remove a redundant jump Denys Vlasenko
@ 2015-04-07 20:43 ` Denys Vlasenko
  2015-04-09  9:03   ` [tip:x86/asm] x86/asm/entry/64: Simplify " tip-bot for Denys Vlasenko
  2015-04-07 20:43 ` [PATCH 7/8] x86/asm/entry/64: Remove GET_THREAD_INFO " Denys Vlasenko
                   ` (2 subsequent siblings)
  7 siblings, 1 reply; 17+ messages in thread
From: Denys Vlasenko @ 2015-04-07 20:43 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Denys Vlasenko, Linus Torvalds, Steven Rostedt, Borislav Petkov,
	H. Peter Anvin, Andy Lutomirski, Oleg Nesterov,
	Frederic Weisbecker, Alexei Starovoitov, Will Drewry, Kees Cook,
	x86, linux-kernel

Replace
        test
        jz  1f
        jmp label
    1:

with
        test
        jnz label

Run-tested.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
CC: Linus Torvalds <torvalds@linux-foundation.org>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Ingo Molnar <mingo@kernel.org>
CC: Borislav Petkov <bp@alien8.de>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: Andy Lutomirski <luto@amacapital.net>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Frederic Weisbecker <fweisbec@gmail.com>
CC: Alexei Starovoitov <ast@plumgrid.com>
CC: Will Drewry <wad@chromium.org>
CC: Kees Cook <keescook@chromium.org>
CC: x86@kernel.org
CC: linux-kernel@vger.kernel.org
---
 arch/x86/kernel/entry_64.S | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 7d4c7c6..9915897 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -531,18 +531,18 @@ ENTRY(ret_from_fork)
 	RESTORE_EXTRA_REGS
 
 	testl $3,CS(%rsp)			# from kernel_thread?
-	jz   1f
 
 	/*
 	 * By the time we get here, we have no idea whether our pt_regs,
 	 * ti flags, and ti status came from the 64-bit SYSCALL fast path,
 	 * the slow path, or one of the ia32entry paths.
-	 * Use int_ret_from_sys_call to return, since it can safely handle
+	 * Use IRET code path to return, since it can safely handle
 	 * all of the above.
 	 */
-	jmp  int_ret_from_sys_call
+	jnz	int_ret_from_sys_call
 
-1:
+	/* We came from kernel_thread */
+	/* nb: we depend on RESTORE_EXTRA_REGS above */
 	movq %rbp, %rdi
 	call *%rbx
 	movl $0, RAX(%rsp)
-- 
1.8.1.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 7/8] x86/asm/entry/64: Remove GET_THREAD_INFO in ret_from_fork
  2015-04-07 20:43 [PATCH 1/8] x86/asm/entry/64: Use common code for rt_sigreturn epilogue Denys Vlasenko
                   ` (4 preceding siblings ...)
  2015-04-07 20:43 ` [PATCH 6/8] x86/asm/entry/64: simplify jumps in ret_from_fork Denys Vlasenko
@ 2015-04-07 20:43 ` Denys Vlasenko
  2015-04-09  9:03   ` [tip:x86/asm] x86/asm/entry/64: Remove GET_THREAD_INFO() " tip-bot for Denys Vlasenko
  2015-04-07 20:43 ` [PATCH 8/8] x86/asm/entry/64: Reduce padding in execve stubs Denys Vlasenko
  2015-04-09  9:01 ` [tip:x86/asm] x86/asm/entry/64: Use common code for rt_sigreturn( ) epilogue tip-bot for Denys Vlasenko
  7 siblings, 1 reply; 17+ messages in thread
From: Denys Vlasenko @ 2015-04-07 20:43 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Denys Vlasenko, Linus Torvalds, Steven Rostedt, Borislav Petkov,
	H. Peter Anvin, Andy Lutomirski, Oleg Nesterov,
	Frederic Weisbecker, Alexei Starovoitov, Will Drewry, Kees Cook,
	x86, linux-kernel

It used to be used to check for _TIF_IA32, but the check has been removed.

Remove GET_THREAD_INFO too.

Run-tested.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
CC: Linus Torvalds <torvalds@linux-foundation.org>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Ingo Molnar <mingo@kernel.org>
CC: Borislav Petkov <bp@alien8.de>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: Andy Lutomirski <luto@amacapital.net>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Frederic Weisbecker <fweisbec@gmail.com>
CC: Alexei Starovoitov <ast@plumgrid.com>
CC: Will Drewry <wad@chromium.org>
CC: Kees Cook <keescook@chromium.org>
CC: x86@kernel.org
CC: linux-kernel@vger.kernel.org
---
 arch/x86/kernel/entry_64.S | 2 --
 1 file changed, 2 deletions(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 9915897..05224d4 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -526,8 +526,6 @@ ENTRY(ret_from_fork)
 
 	call schedule_tail			# rdi: 'prev' task parameter
 
-	GET_THREAD_INFO(%rcx)
-
 	RESTORE_EXTRA_REGS
 
 	testl $3,CS(%rsp)			# from kernel_thread?
-- 
1.8.1.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 8/8] x86/asm/entry/64: Reduce padding in execve stubs
  2015-04-07 20:43 [PATCH 1/8] x86/asm/entry/64: Use common code for rt_sigreturn epilogue Denys Vlasenko
                   ` (5 preceding siblings ...)
  2015-04-07 20:43 ` [PATCH 7/8] x86/asm/entry/64: Remove GET_THREAD_INFO " Denys Vlasenko
@ 2015-04-07 20:43 ` Denys Vlasenko
  2015-04-09  9:04   ` [tip:x86/asm] " tip-bot for Denys Vlasenko
  2015-04-09  9:01 ` [tip:x86/asm] x86/asm/entry/64: Use common code for rt_sigreturn( ) epilogue tip-bot for Denys Vlasenko
  7 siblings, 1 reply; 17+ messages in thread
From: Denys Vlasenko @ 2015-04-07 20:43 UTC (permalink / raw)
  To: Ingo Molnar
  Cc: Denys Vlasenko, Linus Torvalds, Steven Rostedt, Borislav Petkov,
	H. Peter Anvin, Andy Lutomirski, Oleg Nesterov,
	Frederic Weisbecker, Alexei Starovoitov, Will Drewry, Kees Cook,
	x86, linux-kernel

execve stubs are 7 bytes only. Padding them to 16 bytes is a waste.

   text	   data	    bss	    dec	    hex	filename
  12594	      0	      0	  12594	   3132	entry_64.o.before
  12530	      0	      0	  12530	   30f2	entry_64.o

Run-tested.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
CC: Linus Torvalds <torvalds@linux-foundation.org>
CC: Steven Rostedt <rostedt@goodmis.org>
CC: Ingo Molnar <mingo@kernel.org>
CC: Borislav Petkov <bp@alien8.de>
CC: "H. Peter Anvin" <hpa@zytor.com>
CC: Andy Lutomirski <luto@amacapital.net>
CC: Oleg Nesterov <oleg@redhat.com>
CC: Frederic Weisbecker <fweisbec@gmail.com>
CC: Alexei Starovoitov <ast@plumgrid.com>
CC: Will Drewry <wad@chromium.org>
CC: Kees Cook <keescook@chromium.org>
CC: x86@kernel.org
CC: linux-kernel@vger.kernel.org
---
 arch/x86/kernel/entry_64.S | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 05224d4..2aa3eca 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -434,8 +434,12 @@ return_from_execve:
 	jmp	int_ret_from_sys_call
 	CFI_ENDPROC
 END(stub_execve)
-
-ENTRY(stub_execveat)
+/*
+ * Remaining execve stubs are only 7 bytes long.
+ * ENTRY() often aligns to 16 bytes, which in this case has no benefits.
+ */
+	.align	8
+GLOBAL(stub_execveat)
 	CFI_STARTPROC
 	DEFAULT_FRAME 0, 8
 	call	sys_execveat
@@ -444,14 +448,16 @@ ENTRY(stub_execveat)
 END(stub_execveat)
 
 #ifdef CONFIG_X86_X32_ABI
-ENTRY(stub_x32_execve)
+	.align	8
+GLOBAL(stub_x32_execve)
 	CFI_STARTPROC
 	DEFAULT_FRAME 0, 8
 	call	compat_sys_execve
 	jmp	return_from_execve
 	CFI_ENDPROC
 END(stub_x32_execve)
-ENTRY(stub_x32_execveat)
+	.align	8
+GLOBAL(stub_x32_execveat)
 	CFI_STARTPROC
 	DEFAULT_FRAME 0, 8
 	call	compat_sys_execveat
@@ -461,13 +467,15 @@ END(stub_x32_execveat)
 #endif
 
 #ifdef CONFIG_IA32_EMULATION
-ENTRY(stub32_execve)
+	.align	8
+GLOBAL(stub32_execve)
 	CFI_STARTPROC
 	call	compat_sys_execve
 	jmp	return_from_execve
 	CFI_ENDPROC
 END(stub32_execve)
-ENTRY(stub32_execveat)
+	.align	8
+GLOBAL(stub32_execveat)
 	CFI_STARTPROC
 	call	compat_sys_execveat
 	jmp	return_from_execve
-- 
1.8.1.4


^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH 3/8] x86/asm/entry: Zero EXTRA_REGS for stub32_execve[at] too
  2015-04-07 20:43 ` [PATCH 3/8] x86/asm/entry: Zero EXTRA_REGS for stub32_execve[at] too Denys Vlasenko
@ 2015-04-08  2:39   ` Brian Gerst
  2015-04-09  9:02   ` [tip:x86/asm] x86/asm/entry: Zero EXTRA_REGS for stub32_execve() too tip-bot for Denys Vlasenko
  1 sibling, 0 replies; 17+ messages in thread
From: Brian Gerst @ 2015-04-08  2:39 UTC (permalink / raw)
  To: Denys Vlasenko
  Cc: Ingo Molnar, Linus Torvalds, Steven Rostedt, Borislav Petkov,
	H. Peter Anvin, Andy Lutomirski, Oleg Nesterov,
	Frederic Weisbecker, Alexei Starovoitov, Will Drewry, Kees Cook,
	the arch/x86 maintainers, Linux Kernel Mailing List

On Tue, Apr 7, 2015 at 4:43 PM, Denys Vlasenko <dvlasenk@redhat.com> wrote:
> The change which affected how execve clears EXTRA_REGS missed
> 32-bit execve syscalls.
>
> Fix this by using 64-bit execve stub epilogue for them too.
>
> Run-tested.
>
> Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
> CC: Linus Torvalds <torvalds@linux-foundation.org>
> CC: Steven Rostedt <rostedt@goodmis.org>
> CC: Ingo Molnar <mingo@kernel.org>
> CC: Borislav Petkov <bp@alien8.de>
> CC: "H. Peter Anvin" <hpa@zytor.com>
> CC: Andy Lutomirski <luto@amacapital.net>
> CC: Oleg Nesterov <oleg@redhat.com>
> CC: Frederic Weisbecker <fweisbec@gmail.com>
> CC: Alexei Starovoitov <ast@plumgrid.com>
> CC: Will Drewry <wad@chromium.org>
> CC: Kees Cook <keescook@chromium.org>
> CC: x86@kernel.org
> CC: linux-kernel@vger.kernel.org
> ---
>  arch/x86/ia32/ia32entry.S  |  2 --
>  arch/x86/kernel/entry_64.S | 15 +++++++++++++++
>  2 files changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S
> index 5d8f987..a821b1c 100644
> --- a/arch/x86/ia32/ia32entry.S
> +++ b/arch/x86/ia32/ia32entry.S
> @@ -571,8 +571,6 @@ GLOBAL(\label)
>
>         PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn
>         PTREGSCALL stub32_sigreturn, sys32_sigreturn
> -       PTREGSCALL stub32_execve, compat_sys_execve
> -       PTREGSCALL stub32_execveat, compat_sys_execveat
>         PTREGSCALL stub32_fork, sys_fork
>         PTREGSCALL stub32_vfork, sys_vfork
>
> diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
> index 1b0793c..8e3ba38 100644
> --- a/arch/x86/kernel/entry_64.S
> +++ b/arch/x86/kernel/entry_64.S
> @@ -461,6 +461,21 @@ ENTRY(stub_x32_execveat)
>  END(stub_x32_execveat)
>  #endif
>
> +#ifdef CONFIG_IA32_EMULATION
> +ENTRY(stub32_execve)
> +       CFI_STARTPROC
> +       call    compat_sys_execve
> +       jmp     return_from_execve
> +       CFI_ENDPROC
> +END(stub32_execve)
> +ENTRY(stub32_execveat)
> +       CFI_STARTPROC
> +       call    compat_sys_execveat
> +       jmp     return_from_execve
> +       CFI_ENDPROC
> +END(stub32_execveat)
> +#endif
> +
>  /*
>   * sigreturn is special because it needs to restore all registers on return.
>   * This cannot be done with SYSRET, so use the IRET return path instead.

The X32 and IA32 stubs are now identical and should be merged.

--
Brian Gerst

^ permalink raw reply	[flat|nested] 17+ messages in thread

* [tip:x86/asm] x86/asm/entry/64: Use common code for rt_sigreturn( ) epilogue
  2015-04-07 20:43 [PATCH 1/8] x86/asm/entry/64: Use common code for rt_sigreturn epilogue Denys Vlasenko
                   ` (6 preceding siblings ...)
  2015-04-07 20:43 ` [PATCH 8/8] x86/asm/entry/64: Reduce padding in execve stubs Denys Vlasenko
@ 2015-04-09  9:01 ` tip-bot for Denys Vlasenko
  7 siblings, 0 replies; 17+ messages in thread
From: tip-bot for Denys Vlasenko @ 2015-04-09  9:01 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: tglx, dvlasenk, fweisbec, linux-kernel, keescook, mingo, rostedt,
	hpa, wad, brgerst, oleg, luto, ast, bp, torvalds

Commit-ID:  31f0119b817f6474a7b4c48fed7588af1b62c543
Gitweb:     http://git.kernel.org/tip/31f0119b817f6474a7b4c48fed7588af1b62c543
Author:     Denys Vlasenko <dvlasenk@redhat.com>
AuthorDate: Tue, 7 Apr 2015 22:43:37 +0200
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 9 Apr 2015 10:31:24 +0200

x86/asm/entry/64: Use common code for rt_sigreturn() epilogue

Similarly to stub_execve, we can reuse the epilogue in
stub_rt_sigreturn() and stub_x32_rt_sigreturn().

Add a comment explaining why we can't eliminage SAVE_EXTRA_REGS
here.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
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: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Drewry <wad@chromium.org>
Link: http://lkml.kernel.org/r/1428439424-7258-1-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/kernel/entry_64.S | 26 ++++++++++++++++----------
 1 file changed, 16 insertions(+), 10 deletions(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 3197f41..5252e60 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -527,12 +527,21 @@ END(stub_execveat)
  */
 ENTRY(stub_rt_sigreturn)
 	CFI_STARTPROC
-	addq $8, %rsp
-	DEFAULT_FRAME 0
-	SAVE_EXTRA_REGS
+	DEFAULT_FRAME 0, 8
+	/*
+	 * SAVE_EXTRA_REGS result is not normally needed:
+	 * sigreturn overwrites all pt_regs->GPREGS.
+	 * But sigreturn can fail (!), and there is no easy way to detect that.
+	 * To make sure RESTORE_EXTRA_REGS doesn't restore garbage on error,
+	 * we SAVE_EXTRA_REGS here.
+	 */
+	SAVE_EXTRA_REGS 8
 	call sys_rt_sigreturn
-	movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer
+return_from_stub:
+	addq	$8, %rsp
+	CFI_ADJUST_CFA_OFFSET -8
 	RESTORE_EXTRA_REGS
+	movq %rax,RAX(%rsp)
 	jmp int_ret_from_sys_call
 	CFI_ENDPROC
 END(stub_rt_sigreturn)
@@ -540,13 +549,10 @@ END(stub_rt_sigreturn)
 #ifdef CONFIG_X86_X32_ABI
 ENTRY(stub_x32_rt_sigreturn)
 	CFI_STARTPROC
-	addq $8, %rsp
-	DEFAULT_FRAME 0
-	SAVE_EXTRA_REGS
+	DEFAULT_FRAME 0, 8
+	SAVE_EXTRA_REGS 8
 	call sys32_x32_rt_sigreturn
-	movq %rax,RAX(%rsp) # fixme, this could be done at the higher layer
-	RESTORE_EXTRA_REGS
-	jmp int_ret_from_sys_call
+	jmp  return_from_stub
 	CFI_ENDPROC
 END(stub_x32_rt_sigreturn)
 

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [tip:x86/asm] x86/asm/entry/64: Move stub_x32_execvecloser() to stub_execveat()
  2015-04-07 20:43 ` [PATCH 2/8] x86/asm/entry/64: Move stub_x32_execve[at] closer to stub_execveat Denys Vlasenko
@ 2015-04-09  9:02   ` tip-bot for Denys Vlasenko
  0 siblings, 0 replies; 17+ messages in thread
From: tip-bot for Denys Vlasenko @ 2015-04-09  9:02 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: brgerst, bp, tglx, hpa, torvalds, fweisbec, rostedt, dvlasenk,
	oleg, wad, keescook, luto, linux-kernel, mingo, ast

Commit-ID:  05f1752d195c145d02ae40881d0985c2cfbee473
Gitweb:     http://git.kernel.org/tip/05f1752d195c145d02ae40881d0985c2cfbee473
Author:     Denys Vlasenko <dvlasenk@redhat.com>
AuthorDate: Tue, 7 Apr 2015 22:43:38 +0200
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 9 Apr 2015 10:31:24 +0200

x86/asm/entry/64: Move stub_x32_execvecloser() to stub_execveat()

This is a preparatory patch for moving stub32_execve[at]() to this
file. It makes sense to have all execve stubs in one place, so
that they can reuse code.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
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: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Drewry <wad@chromium.org>
Link: http://lkml.kernel.org/r/1428439424-7258-2-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/kernel/entry_64.S | 34 +++++++++++++++++-----------------
 1 file changed, 17 insertions(+), 17 deletions(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 5252e60..f7d9ba6 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -521,6 +521,23 @@ ENTRY(stub_execveat)
 	CFI_ENDPROC
 END(stub_execveat)
 
+#ifdef CONFIG_X86_X32_ABI
+ENTRY(stub_x32_execve)
+	CFI_STARTPROC
+	DEFAULT_FRAME 0, 8
+	call	compat_sys_execve
+	jmp	return_from_execve
+	CFI_ENDPROC
+END(stub_x32_execve)
+ENTRY(stub_x32_execveat)
+	CFI_STARTPROC
+	DEFAULT_FRAME 0, 8
+	call	compat_sys_execveat
+	jmp	return_from_execve
+	CFI_ENDPROC
+END(stub_x32_execveat)
+#endif
+
 /*
  * sigreturn is special because it needs to restore all registers on return.
  * This cannot be done with SYSRET, so use the IRET return path instead.
@@ -555,23 +572,6 @@ ENTRY(stub_x32_rt_sigreturn)
 	jmp  return_from_stub
 	CFI_ENDPROC
 END(stub_x32_rt_sigreturn)
-
-ENTRY(stub_x32_execve)
-	CFI_STARTPROC
-	DEFAULT_FRAME 0, 8
-	call	compat_sys_execve
-	jmp	return_from_execve
-	CFI_ENDPROC
-END(stub_x32_execve)
-
-ENTRY(stub_x32_execveat)
-	CFI_STARTPROC
-	DEFAULT_FRAME 0, 8
-	call	compat_sys_execveat
-	jmp	return_from_execve
-	CFI_ENDPROC
-END(stub_x32_execveat)
-
 #endif
 
 /*

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [tip:x86/asm] x86/asm/entry: Zero EXTRA_REGS for stub32_execve() too
  2015-04-07 20:43 ` [PATCH 3/8] x86/asm/entry: Zero EXTRA_REGS for stub32_execve[at] too Denys Vlasenko
  2015-04-08  2:39   ` Brian Gerst
@ 2015-04-09  9:02   ` tip-bot for Denys Vlasenko
  1 sibling, 0 replies; 17+ messages in thread
From: tip-bot for Denys Vlasenko @ 2015-04-09  9:02 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: keescook, rostedt, ast, fweisbec, mingo, hpa, linux-kernel, wad,
	bp, oleg, luto, torvalds, brgerst, tglx, dvlasenk

Commit-ID:  0f90fb979d7b53d80a6d5cb6e127b4b4b249907e
Gitweb:     http://git.kernel.org/tip/0f90fb979d7b53d80a6d5cb6e127b4b4b249907e
Author:     Denys Vlasenko <dvlasenk@redhat.com>
AuthorDate: Tue, 7 Apr 2015 22:43:39 +0200
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 9 Apr 2015 10:31:24 +0200

x86/asm/entry: Zero EXTRA_REGS for stub32_execve() too

The change which affected how execve clears EXTRA_REGS missed
32-bit execve syscalls.

Fix this by using 64-bit execve stub epilogue for them too.

Run-tested.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
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: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Drewry <wad@chromium.org>
Link: http://lkml.kernel.org/r/1428439424-7258-3-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/ia32/ia32entry.S  |  2 --
 arch/x86/kernel/entry_64.S | 15 +++++++++++++++
 2 files changed, 15 insertions(+), 2 deletions(-)

diff --git a/arch/x86/ia32/ia32entry.S b/arch/x86/ia32/ia32entry.S
index 5d8f987..a821b1c 100644
--- a/arch/x86/ia32/ia32entry.S
+++ b/arch/x86/ia32/ia32entry.S
@@ -571,8 +571,6 @@ GLOBAL(\label)
 
 	PTREGSCALL stub32_rt_sigreturn, sys32_rt_sigreturn
 	PTREGSCALL stub32_sigreturn, sys32_sigreturn
-	PTREGSCALL stub32_execve, compat_sys_execve
-	PTREGSCALL stub32_execveat, compat_sys_execveat
 	PTREGSCALL stub32_fork, sys_fork
 	PTREGSCALL stub32_vfork, sys_vfork
 
diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index f7d9ba6..5380b3a 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -538,6 +538,21 @@ ENTRY(stub_x32_execveat)
 END(stub_x32_execveat)
 #endif
 
+#ifdef CONFIG_IA32_EMULATION
+ENTRY(stub32_execve)
+	CFI_STARTPROC
+	call	compat_sys_execve
+	jmp	return_from_execve
+	CFI_ENDPROC
+END(stub32_execve)
+ENTRY(stub32_execveat)
+	CFI_STARTPROC
+	call	compat_sys_execveat
+	jmp	return_from_execve
+	CFI_ENDPROC
+END(stub32_execveat)
+#endif
+
 /*
  * sigreturn is special because it needs to restore all registers on return.
  * This cannot be done with SYSRET, so use the IRET return path instead.

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [tip:x86/asm] x86/asm/entry/64: Optimize [v]fork/clone stubs
  2015-04-07 20:43 ` [PATCH 4/8] x86/asm/entry/64: optimize [v]fork/clone stubs Denys Vlasenko
@ 2015-04-09  9:02   ` tip-bot for Denys Vlasenko
  0 siblings, 0 replies; 17+ messages in thread
From: tip-bot for Denys Vlasenko @ 2015-04-09  9:02 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: hpa, bp, keescook, ast, rostedt, torvalds, wad, linux-kernel,
	luto, dvlasenk, tglx, oleg, fweisbec, brgerst, mingo

Commit-ID:  772951c4e4b06cdffeff499259dba07b544f3166
Gitweb:     http://git.kernel.org/tip/772951c4e4b06cdffeff499259dba07b544f3166
Author:     Denys Vlasenko <dvlasenk@redhat.com>
AuthorDate: Tue, 7 Apr 2015 22:43:40 +0200
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 9 Apr 2015 10:31:25 +0200

x86/asm/entry/64: Optimize [v]fork/clone stubs

Replace "call func; ret" with "jmp func".

Run-tested.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
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: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Drewry <wad@chromium.org>
Link: http://lkml.kernel.org/r/1428439424-7258-4-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/kernel/entry_64.S | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index 5380b3a..ce85256 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -484,8 +484,7 @@ ENTRY(stub_\func)
 	CFI_STARTPROC
 	DEFAULT_FRAME 0, 8		/* offset 8: return address */
 	SAVE_EXTRA_REGS 8
-	call sys_\func
-	ret
+	jmp sys_\func
 	CFI_ENDPROC
 END(stub_\func)
 	.endm

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [tip:x86/asm] x86/asm/entry/64: Remove a redundant jump
  2015-04-07 20:43 ` [PATCH 5/8] x86/asm/entry/64: remove a redundant jump Denys Vlasenko
@ 2015-04-09  9:03   ` tip-bot for Denys Vlasenko
  0 siblings, 0 replies; 17+ messages in thread
From: tip-bot for Denys Vlasenko @ 2015-04-09  9:03 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: ast, wad, rostedt, fweisbec, hpa, mingo, brgerst, oleg, torvalds,
	dvlasenk, linux-kernel, bp, luto, keescook, tglx

Commit-ID:  a30b0085f54efae11f6256df4e4a16af7eefc1c4
Gitweb:     http://git.kernel.org/tip/a30b0085f54efae11f6256df4e4a16af7eefc1c4
Author:     Denys Vlasenko <dvlasenk@redhat.com>
AuthorDate: Tue, 7 Apr 2015 22:43:41 +0200
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 9 Apr 2015 10:31:25 +0200

x86/asm/entry/64: Remove a redundant jump

Jumping to the very next instruction is not very useful:

        jmp label
    label:

Removing the jump.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
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: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Drewry <wad@chromium.org>
Link: http://lkml.kernel.org/r/1428439424-7258-5-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/kernel/entry_64.S | 1 -
 1 file changed, 1 deletion(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index ce85256..e8ddd51 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -1448,7 +1448,6 @@ ENTRY(nmi)
 	/* If it is below the NMI stack, it is a normal NMI */
 	jb	first_nmi
 	/* Ah, it is within the NMI stack, treat it as nested */
-	jmp	nested_nmi
 
 	CFI_REMEMBER_STATE
 

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [tip:x86/asm] x86/asm/entry/64: Simplify jumps in ret_from_fork
  2015-04-07 20:43 ` [PATCH 6/8] x86/asm/entry/64: simplify jumps in ret_from_fork Denys Vlasenko
@ 2015-04-09  9:03   ` tip-bot for Denys Vlasenko
  0 siblings, 0 replies; 17+ messages in thread
From: tip-bot for Denys Vlasenko @ 2015-04-09  9:03 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: wad, ast, mingo, linux-kernel, hpa, luto, torvalds, dvlasenk,
	keescook, brgerst, fweisbec, oleg, rostedt, bp, tglx

Commit-ID:  66ad4efa51805964521db03d8aa827a8dd9058b9
Gitweb:     http://git.kernel.org/tip/66ad4efa51805964521db03d8aa827a8dd9058b9
Author:     Denys Vlasenko <dvlasenk@redhat.com>
AuthorDate: Tue, 7 Apr 2015 22:43:42 +0200
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 9 Apr 2015 10:31:25 +0200

x86/asm/entry/64: Simplify jumps in ret_from_fork

Replace
        test
        jz  1f
        jmp label
    1:

with
        test
        jnz label

Run-tested.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
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: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Drewry <wad@chromium.org>
Link: http://lkml.kernel.org/r/1428439424-7258-6-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/kernel/entry_64.S | 8 ++++----
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index e8ddd51..a35e5e4 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -608,18 +608,18 @@ ENTRY(ret_from_fork)
 	RESTORE_EXTRA_REGS
 
 	testl $3,CS(%rsp)			# from kernel_thread?
-	jz   1f
 
 	/*
 	 * By the time we get here, we have no idea whether our pt_regs,
 	 * ti flags, and ti status came from the 64-bit SYSCALL fast path,
 	 * the slow path, or one of the ia32entry paths.
-	 * Use int_ret_from_sys_call to return, since it can safely handle
+	 * Use IRET code path to return, since it can safely handle
 	 * all of the above.
 	 */
-	jmp  int_ret_from_sys_call
+	jnz	int_ret_from_sys_call
 
-1:
+	/* We came from kernel_thread */
+	/* nb: we depend on RESTORE_EXTRA_REGS above */
 	movq %rbp, %rdi
 	call *%rbx
 	movl $0, RAX(%rsp)

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [tip:x86/asm] x86/asm/entry/64: Remove GET_THREAD_INFO() in ret_from_fork
  2015-04-07 20:43 ` [PATCH 7/8] x86/asm/entry/64: Remove GET_THREAD_INFO " Denys Vlasenko
@ 2015-04-09  9:03   ` tip-bot for Denys Vlasenko
  0 siblings, 0 replies; 17+ messages in thread
From: tip-bot for Denys Vlasenko @ 2015-04-09  9:03 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: linux-kernel, brgerst, bp, oleg, keescook, dvlasenk, rostedt,
	fweisbec, mingo, torvalds, luto, tglx, wad, hpa, ast

Commit-ID:  54a81e914b2432a86dd49cf611b0f71ef44ca7ad
Gitweb:     http://git.kernel.org/tip/54a81e914b2432a86dd49cf611b0f71ef44ca7ad
Author:     Denys Vlasenko <dvlasenk@redhat.com>
AuthorDate: Tue, 7 Apr 2015 22:43:43 +0200
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 9 Apr 2015 10:31:26 +0200

x86/asm/entry/64: Remove GET_THREAD_INFO() in ret_from_fork

It used to be used to check for _TIF_IA32, but the check has
been removed.

Remove GET_THREAD_INFO() too.

Run-tested.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
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: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Drewry <wad@chromium.org>
Link: http://lkml.kernel.org/r/1428439424-7258-7-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/kernel/entry_64.S | 2 --
 1 file changed, 2 deletions(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index a35e5e4..b67f2fc 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -603,8 +603,6 @@ ENTRY(ret_from_fork)
 
 	call schedule_tail			# rdi: 'prev' task parameter
 
-	GET_THREAD_INFO(%rcx)
-
 	RESTORE_EXTRA_REGS
 
 	testl $3,CS(%rsp)			# from kernel_thread?

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [tip:x86/asm] x86/asm/entry/64: Reduce padding in execve stubs
  2015-04-07 20:43 ` [PATCH 8/8] x86/asm/entry/64: Reduce padding in execve stubs Denys Vlasenko
@ 2015-04-09  9:04   ` tip-bot for Denys Vlasenko
  0 siblings, 0 replies; 17+ messages in thread
From: tip-bot for Denys Vlasenko @ 2015-04-09  9:04 UTC (permalink / raw)
  To: linux-tip-commits
  Cc: oleg, torvalds, tglx, brgerst, wad, luto, linux-kernel, keescook,
	dvlasenk, ast, mingo, bp, rostedt, fweisbec, hpa

Commit-ID:  a37f34a325d90856314ccd4994e1070dcc6bdcc4
Gitweb:     http://git.kernel.org/tip/a37f34a325d90856314ccd4994e1070dcc6bdcc4
Author:     Denys Vlasenko <dvlasenk@redhat.com>
AuthorDate: Tue, 7 Apr 2015 22:43:44 +0200
Committer:  Ingo Molnar <mingo@kernel.org>
CommitDate: Thu, 9 Apr 2015 10:31:26 +0200

x86/asm/entry/64: Reduce padding in execve stubs

execve stubs are 7 bytes only. Padding them to 16 bytes is a
waste.

   text	   data	    bss	    dec	    hex	filename
  12594	      0	      0	  12594	   3132	entry_64.o.before
  12530	      0	      0	  12530	   30f2	entry_64.o

Run-tested.

Signed-off-by: Denys Vlasenko <dvlasenk@redhat.com>
Cc: Alexei Starovoitov <ast@plumgrid.com>
Cc: Andy Lutomirski <luto@amacapital.net>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Brian Gerst <brgerst@gmail.com>
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: Thomas Gleixner <tglx@linutronix.de>
Cc: Will Drewry <wad@chromium.org>
Link: http://lkml.kernel.org/r/1428439424-7258-8-git-send-email-dvlasenk@redhat.com
Signed-off-by: Ingo Molnar <mingo@kernel.org>
---
 arch/x86/kernel/entry_64.S | 20 ++++++++++++++------
 1 file changed, 14 insertions(+), 6 deletions(-)

diff --git a/arch/x86/kernel/entry_64.S b/arch/x86/kernel/entry_64.S
index b67f2fc..c7b2384 100644
--- a/arch/x86/kernel/entry_64.S
+++ b/arch/x86/kernel/entry_64.S
@@ -511,8 +511,12 @@ return_from_execve:
 	jmp	int_ret_from_sys_call
 	CFI_ENDPROC
 END(stub_execve)
-
-ENTRY(stub_execveat)
+/*
+ * Remaining execve stubs are only 7 bytes long.
+ * ENTRY() often aligns to 16 bytes, which in this case has no benefits.
+ */
+	.align	8
+GLOBAL(stub_execveat)
 	CFI_STARTPROC
 	DEFAULT_FRAME 0, 8
 	call	sys_execveat
@@ -521,14 +525,16 @@ ENTRY(stub_execveat)
 END(stub_execveat)
 
 #ifdef CONFIG_X86_X32_ABI
-ENTRY(stub_x32_execve)
+	.align	8
+GLOBAL(stub_x32_execve)
 	CFI_STARTPROC
 	DEFAULT_FRAME 0, 8
 	call	compat_sys_execve
 	jmp	return_from_execve
 	CFI_ENDPROC
 END(stub_x32_execve)
-ENTRY(stub_x32_execveat)
+	.align	8
+GLOBAL(stub_x32_execveat)
 	CFI_STARTPROC
 	DEFAULT_FRAME 0, 8
 	call	compat_sys_execveat
@@ -538,13 +544,15 @@ END(stub_x32_execveat)
 #endif
 
 #ifdef CONFIG_IA32_EMULATION
-ENTRY(stub32_execve)
+	.align	8
+GLOBAL(stub32_execve)
 	CFI_STARTPROC
 	call	compat_sys_execve
 	jmp	return_from_execve
 	CFI_ENDPROC
 END(stub32_execve)
-ENTRY(stub32_execveat)
+	.align	8
+GLOBAL(stub32_execveat)
 	CFI_STARTPROC
 	call	compat_sys_execveat
 	jmp	return_from_execve

^ permalink raw reply related	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2015-04-09  9:05 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-04-07 20:43 [PATCH 1/8] x86/asm/entry/64: Use common code for rt_sigreturn epilogue Denys Vlasenko
2015-04-07 20:43 ` [PATCH 2/8] x86/asm/entry/64: Move stub_x32_execve[at] closer to stub_execveat Denys Vlasenko
2015-04-09  9:02   ` [tip:x86/asm] x86/asm/entry/64: Move stub_x32_execvecloser() to stub_execveat() tip-bot for Denys Vlasenko
2015-04-07 20:43 ` [PATCH 3/8] x86/asm/entry: Zero EXTRA_REGS for stub32_execve[at] too Denys Vlasenko
2015-04-08  2:39   ` Brian Gerst
2015-04-09  9:02   ` [tip:x86/asm] x86/asm/entry: Zero EXTRA_REGS for stub32_execve() too tip-bot for Denys Vlasenko
2015-04-07 20:43 ` [PATCH 4/8] x86/asm/entry/64: optimize [v]fork/clone stubs Denys Vlasenko
2015-04-09  9:02   ` [tip:x86/asm] x86/asm/entry/64: Optimize " tip-bot for Denys Vlasenko
2015-04-07 20:43 ` [PATCH 5/8] x86/asm/entry/64: remove a redundant jump Denys Vlasenko
2015-04-09  9:03   ` [tip:x86/asm] x86/asm/entry/64: Remove " tip-bot for Denys Vlasenko
2015-04-07 20:43 ` [PATCH 6/8] x86/asm/entry/64: simplify jumps in ret_from_fork Denys Vlasenko
2015-04-09  9:03   ` [tip:x86/asm] x86/asm/entry/64: Simplify " tip-bot for Denys Vlasenko
2015-04-07 20:43 ` [PATCH 7/8] x86/asm/entry/64: Remove GET_THREAD_INFO " Denys Vlasenko
2015-04-09  9:03   ` [tip:x86/asm] x86/asm/entry/64: Remove GET_THREAD_INFO() " tip-bot for Denys Vlasenko
2015-04-07 20:43 ` [PATCH 8/8] x86/asm/entry/64: Reduce padding in execve stubs Denys Vlasenko
2015-04-09  9:04   ` [tip:x86/asm] " tip-bot for Denys Vlasenko
2015-04-09  9:01 ` [tip:x86/asm] x86/asm/entry/64: Use common code for rt_sigreturn( ) epilogue tip-bot for Denys Vlasenko

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).