All of lore.kernel.org
 help / color / mirror / Atom feed
From: Brian Gerst <brgerst@gmail.com>
To: linux-kernel@vger.kernel.org, x86@kernel.org
Cc: Thomas Gleixner <tglx@linutronix.de>,
	Borislav Petkov <bp@alien8.de>, "H . Peter Anvin" <hpa@zytor.com>,
	Peter Zijlstra <peterz@infradead.org>,
	Sami Tolvanen <samitolvanen@google.com>,
	alyssa.milburn@linux.intel.com, keescook@chromium.org,
	jpoimboe@kernel.org, joao@overdrivepizza.com,
	tim.c.chen@linux.intel.com, Brian Gerst <brgerst@gmail.com>
Subject: [PATCH v2 1/2] x86/32: Remove schedule_tail_wrapper()
Date: Fri, 23 Jun 2023 18:55:28 -0400	[thread overview]
Message-ID: <20230623225529.34590-2-brgerst@gmail.com> (raw)
In-Reply-To: <20230623225529.34590-1-brgerst@gmail.com>

The unwinder expects a return address at the very top of the kernel
stack just below pt_regs and before any stack frame is created.  Instead
of calling a wrapper, set up a return address as if ret_from_fork()
was called from the syscall entry code.

Signed-off-by: Brian Gerst <brgerst@gmail.com>
---
 arch/x86/entry/entry_32.S | 33 ++++++++++-----------------------
 1 file changed, 10 insertions(+), 23 deletions(-)

diff --git a/arch/x86/entry/entry_32.S b/arch/x86/entry/entry_32.S
index 91397f58ac30..e56123f03a79 100644
--- a/arch/x86/entry/entry_32.S
+++ b/arch/x86/entry/entry_32.S
@@ -719,26 +719,6 @@ SYM_CODE_START(__switch_to_asm)
 SYM_CODE_END(__switch_to_asm)
 .popsection
 
-/*
- * The unwinder expects the last frame on the stack to always be at the same
- * offset from the end of the page, which allows it to validate the stack.
- * Calling schedule_tail() directly would break that convention because its an
- * asmlinkage function so its argument has to be pushed on the stack.  This
- * wrapper creates a proper "end of stack" frame header before the call.
- */
-.pushsection .text, "ax"
-SYM_FUNC_START(schedule_tail_wrapper)
-	FRAME_BEGIN
-
-	pushl	%eax
-	call	schedule_tail
-	popl	%eax
-
-	FRAME_END
-	RET
-SYM_FUNC_END(schedule_tail_wrapper)
-.popsection
-
 /*
  * A newly forked process directly context switches into this address.
  *
@@ -748,16 +728,23 @@ SYM_FUNC_END(schedule_tail_wrapper)
  */
 .pushsection .text, "ax"
 SYM_CODE_START(ret_from_fork)
-	call	schedule_tail_wrapper
+	/* return address for the stack unwinder */
+	pushl	$.Lsyscall_32_done
+
+	FRAME_BEGIN
+	pushl	%eax
+	call	schedule_tail
+	addl	$4, %esp
+	FRAME_END
 
 	testl	%ebx, %ebx
 	jnz	1f		/* kernel threads are uncommon */
 
 2:
 	/* When we fork, we trace the syscall return in the child, too. */
-	movl    %esp, %eax
+	leal    4(%esp), %eax
 	call    syscall_exit_to_user_mode
-	jmp     .Lsyscall_32_done
+	RET
 
 	/* kernel thread */
 1:	movl	%edi, %eax
-- 
2.41.0


  reply	other threads:[~2023-06-23 22:56 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-06-23 22:55 [PATCH v2 0/2] Rewrite ret_from_fork() in C Brian Gerst
2023-06-23 22:55 ` Brian Gerst [this message]
2023-07-10  8:13   ` [tip: x86/urgent] x86/32: Remove schedule_tail_wrapper() tip-bot2 for Brian Gerst
2023-06-23 22:55 ` [PATCH v2 2/2] x86: Rewrite ret_from_fork() in C Brian Gerst
2023-07-10  8:13   ` [tip: x86/urgent] " tip-bot2 for Brian Gerst
2023-07-19 15:21   ` [PATCH v2 2/2] " Petr Mladek
2023-07-19 20:02     ` Peter Zijlstra
2023-07-19 20:15       ` Peter Zijlstra
2023-07-19 20:50         ` Peter Zijlstra
2023-07-19 23:31           ` Josh Poimboeuf
2023-07-20  5:22             ` Peter Zijlstra
2023-07-20  9:28               ` Peter Zijlstra
2023-07-20  8:18         ` Petr Mladek
2023-07-21  9:20         ` [tip: x86/urgent] x86: Fix kthread unwind tip-bot2 for Peter Zijlstra
2023-07-19 20:33     ` [PATCH v2 2/2] x86: Rewrite ret_from_fork() in C Joe Lawrence
2023-07-19 20:41       ` Peter Zijlstra

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20230623225529.34590-2-brgerst@gmail.com \
    --to=brgerst@gmail.com \
    --cc=alyssa.milburn@linux.intel.com \
    --cc=bp@alien8.de \
    --cc=hpa@zytor.com \
    --cc=joao@overdrivepizza.com \
    --cc=jpoimboe@kernel.org \
    --cc=keescook@chromium.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=samitolvanen@google.com \
    --cc=tglx@linutronix.de \
    --cc=tim.c.chen@linux.intel.com \
    --cc=x86@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.