All of lore.kernel.org
 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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.