mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Josh Poimboeuf <jpoimboe@kernel.org>
Cc: linux-kernel@vger.kernel.org, linux-tip-commits@vger.kernel.org,
	"Borislav Petkov (AMD)" <bp@alien8.de>,
	x86@kernel.org
Subject: [PATCH] objtool/x86: Fixup frame-pointer vs rethunk
Date: Thu, 17 Aug 2023 00:08:40 +0200	[thread overview]
Message-ID: <20230816220840.GB998718@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <20230816203152.co5hgmo2epd6wvef@treble>

On Wed, Aug 16, 2023 at 01:31:52PM -0700, Josh Poimboeuf wrote:
> On Wed, Aug 16, 2023 at 01:59:21PM +0200, Peter Zijlstra wrote:
> > Turns out I forgot to build with FRAME_POINTER=y, that still gives:
> > 
> > vmlinux.o: warning: objtool: srso_untrain_ret+0xd: call without frame pointer save/setup
> > 
> > the below seems to cure this.
> 
> LGTM

OK, with Changelog below.

---
Subject: objtool/x86: Fixup frame-pointer vs rethunk
From: Peter Zijlstra <peterz@infradead.org>
Date: Wed, 16 Aug 2023 13:59:21 +0200

For stack-validation of a frame-pointer build, objtool validates that
every CALL instructions is preceded by a frame-setup. The new SRSO
return thunks violate this with their RSB stuffing trickery.

Extend the __fentry__ exception to also cover the embedded_insn case
used for this. This cures:

vmlinux.o: warning: objtool: srso_untrain_ret+0xd: call without frame pointer save/setup

Fixes: 4ae68b26c3ab ("objtool/x86: Fix SRSO mess")
Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org>
---
 tools/objtool/check.c |   17 +++++++++++------
 1 file changed, 11 insertions(+), 6 deletions(-)

--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -2630,12 +2630,17 @@ static int decode_sections(struct objtoo
 	return 0;
 }
 
-static bool is_fentry_call(struct instruction *insn)
+static bool is_special_call(struct instruction *insn)
 {
-	if (insn->type == INSN_CALL &&
-	    insn_call_dest(insn) &&
-	    insn_call_dest(insn)->fentry)
-		return true;
+	if (insn->type == INSN_CALL) {
+		struct symbol *dest = insn_call_dest(insn);
+
+		if (!dest)
+			return false;
+
+		if (dest->fentry || dest->embedded_insn)
+			return true;
+	}
 
 	return false;
 }
@@ -3636,7 +3641,7 @@ static int validate_branch(struct objtoo
 			if (ret)
 				return ret;
 
-			if (opts.stackval && func && !is_fentry_call(insn) &&
+			if (opts.stackval && func && !is_special_call(insn) &&
 			    !has_valid_stack_frame(&state)) {
 				WARN_INSN(insn, "call without frame pointer save/setup");
 				return 1;

  reply	other threads:[~2023-08-16 22:09 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-08-14 11:44 [PATCH v2 00/11] Fix up SRSO stuff Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 01/11] x86/cpu: Fixup __x86_return_thunk Peter Zijlstra
2023-08-16  7:55   ` [tip: x86/urgent] x86/cpu: Fix __x86_return_thunk symbol type tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 02/11] x86/cpu: Fix up srso_safe_ret() and __x86_return_thunk() Peter Zijlstra
2023-08-16  7:55   ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 03/11] objtool/x86: Fix SRSO mess Peter Zijlstra
2023-08-14 12:54   ` Andrew.Cooper3
2023-08-16  7:55   ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 11:59     ` Peter Zijlstra
2023-08-16 20:31       ` Josh Poimboeuf
2023-08-16 22:08         ` Peter Zijlstra [this message]
2023-08-16 22:22           ` [PATCH] objtool/x86: Fixup frame-pointer vs rethunk Josh Poimboeuf
2023-08-17  8:39       ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 04/11] x86/alternative: Make custom return thunk unconditional Peter Zijlstra
2023-08-16  7:55   ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 05/11] x86/cpu: Clean up SRSO return thunk mess Peter Zijlstra
2023-08-14 13:02   ` Borislav Petkov
2023-08-14 17:48   ` Borislav Petkov
2023-08-15 21:29   ` Nathan Chancellor
2023-08-15 22:43     ` Peter Zijlstra
2023-08-16  7:38       ` Borislav Petkov
2023-08-16 14:52         ` Nathan Chancellor
2023-08-16 15:08           ` Borislav Petkov
2023-08-16  7:55   ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 18:58     ` Nathan Chancellor
2023-08-16 19:24       ` Borislav Petkov
2023-08-16 19:30         ` Nathan Chancellor
2023-08-16 19:42           ` Borislav Petkov
2023-08-16 19:57             ` Borislav Petkov
2023-08-16 21:20   ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 06/11] x86/cpu: Rename original retbleed methods Peter Zijlstra
2023-08-14 19:41   ` Josh Poimboeuf
2023-08-16  7:55   ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 21:20   ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 07/11] x86/cpu: Rename srso_(.*)_alias to srso_alias_\1 Peter Zijlstra
2023-08-16  7:55   ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 21:20   ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 08/11] x86/cpu: Cleanup the untrain mess Peter Zijlstra
2023-08-16  7:55   ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 21:20   ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 09/11] x86/cpu/kvm: Provide UNTRAIN_RET_VM Peter Zijlstra
2023-08-16  7:55   ` [tip: x86/urgent] " tip-bot2 for Peter Zijlstra
2023-08-16 21:20   ` tip-bot2 for Peter Zijlstra
2023-08-14 11:44 ` [PATCH v2 10/11] x86/alternatives: Simplify ALTERNATIVE_n() Peter Zijlstra
2023-08-15 20:49   ` Nikolay Borisov
2023-08-15 22:44     ` Peter Zijlstra
2023-09-07  8:31   ` Borislav Petkov
2023-09-07 11:09     ` Peter Zijlstra
2023-09-07 11:11       ` Peter Zijlstra
2023-09-07 11:16         ` Peter Zijlstra
2023-09-07 15:06       ` Borislav Petkov
2023-09-07 15:30         ` Borislav Petkov
2023-09-09  7:50           ` Borislav Petkov
2023-09-09  9:25             ` Peter Zijlstra
2023-09-09  9:42               ` Peter Zijlstra
2023-09-10 14:42               ` Borislav Petkov
2023-09-12  9:27                 ` Peter Zijlstra
2023-09-12  9:44                   ` Peter Zijlstra
2023-09-13  4:37                     ` Borislav Petkov
2023-09-13  8:46                       ` Peter Zijlstra
2023-09-13 14:38                         ` Borislav Petkov
2023-09-13 16:14                           ` Peter Zijlstra
2023-09-15  7:46                           ` Peter Zijlstra
2023-09-15  7:51                             ` Peter Zijlstra
2023-09-15 12:05                               ` Borislav Petkov
2023-09-13  4:24                   ` Borislav Petkov
2023-08-14 11:44 ` [PATCH v2 11/11] x86/cpu: Use fancy alternatives to get rid of entry_untrain_ret() Peter Zijlstra
2023-08-14 16:44 ` [PATCH v2 00/11] Fix up SRSO stuff Borislav Petkov
2023-08-14 19:51   ` Josh Poimboeuf
2023-08-14 19:57     ` Borislav Petkov
2023-08-14 20:01     ` Josh Poimboeuf
2023-08-14 20:09       ` Borislav Petkov
2023-08-15 14:26         ` [PATCH] x86/srso: Explain the untraining sequences a bit more Borislav Petkov
2023-08-15 15:41           ` Nikolay Borisov

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=20230816220840.GB998718@hirez.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=bp@alien8.de \
    --cc=jpoimboe@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®