The Linux Kernel Mailing List
 help / color / mirror / Atom feed
From: Peter Zijlstra <peterz@infradead.org>
To: Andrew Cooper <andrew.cooper3@citrix.com>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Petr Pavlu <petr.pavlu@suse.com>,
	Josh Poimboeuf <jpoimboe@kernel.org>
Subject: Re: [PATCH] x86/retpoline,kprobes: Fix "Fix position of thunk sections with CONFIG_LTO_CLANG"
Date: Fri, 4 Aug 2023 10:43:28 +0200	[thread overview]
Message-ID: <20230804084328.GA220434@hirez.programming.kicks-ass.net> (raw)
In-Reply-To: <20230804082853.GM212435@hirez.programming.kicks-ass.net>

On Fri, Aug 04, 2023 at 10:28:53AM +0200, Peter Zijlstra wrote:
> On Fri, Aug 04, 2023 at 12:03:23AM +0100, Andrew Cooper wrote:
> > Lets hope there are no .text..__x86womble sections around.
> > 
> > Fixes: 973ab2d61f33 ("x86/retpoline,kprobes: Fix position of thunk sections with CONFIG_LTO_CLANG")
> > Signed-off-by: Andrew Cooper <andrew.cooper3@citrix.com>
> > ---
> > CC: Petr Pavlu <petr.pavlu@suse.com>
> > CC: Peter Zijlstra (Intel) <peterz@infradead.org>
> > CC: Josh Poimboeuf <jpoimboe@kernel.org>
> > CC: linux-kernel@vger.kernel.org
> > 
> > Alternatively,
> > 
> > int strstarts(const char *s1, const char *s2)
> > {
> >         return strncmp(s1, s2, strlen(s2));
> > }
> 
> Durr, I hate C ;-/ And yes, we have a ton of it, lemme try that
> strstarts thing.

So there, that builds and compiles a kernel, must be good :-)

Now, let me go make some wake-up juice ...

---
 tools/objtool/check.c | 31 +++++++++++++++----------------
 1 file changed, 15 insertions(+), 16 deletions(-)

diff --git a/tools/objtool/check.c b/tools/objtool/check.c
index e096eb325acd..a2b624b580ff 100644
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -20,6 +20,7 @@
 #include <linux/hashtable.h>
 #include <linux/kernel.h>
 #include <linux/static_call_types.h>
+#include <linux/string.h>
 
 struct alternative {
 	struct alternative *next;
@@ -383,13 +384,13 @@ static int decode_instructions(struct objtool_file *file)
 
 		if (strcmp(sec->name, ".altinstr_replacement") &&
 		    strcmp(sec->name, ".altinstr_aux") &&
-		    strncmp(sec->name, ".discard.", 9))
+		    !strstarts(sec->name, ".discard."))
 			sec->text = true;
 
 		if (!strcmp(sec->name, ".noinstr.text") ||
 		    !strcmp(sec->name, ".entry.text") ||
 		    !strcmp(sec->name, ".cpuidle.text") ||
-		    !strncmp(sec->name, ".text..__x86.", 12))
+		    strstarts(sec->name, ".text..__x86."))
 			sec->noinstr = true;
 
 		/*
@@ -709,8 +710,7 @@ static int create_static_call_sections(struct objtool_file *file)
 			perror("strdup");
 			return -1;
 		}
-		if (strncmp(key_name, STATIC_CALL_TRAMP_PREFIX_STR,
-			    STATIC_CALL_TRAMP_PREFIX_LEN)) {
+		if (!strstarts(key_name, STATIC_CALL_TRAMP_PREFIX_STR)) {
 			WARN("static_call: trampoline name malformed: %s", key_name);
 			free(key_name);
 			return -1;
@@ -900,7 +900,7 @@ static int create_cfi_sections(struct objtool_file *file)
 		if (sym->type != STT_FUNC)
 			continue;
 
-		if (strncmp(sym->name, "__cfi_", 6))
+		if (!strstarts(sym->name, "__cfi_"))
 			continue;
 
 		idx++;
@@ -916,7 +916,7 @@ static int create_cfi_sections(struct objtool_file *file)
 		if (sym->type != STT_FUNC)
 			continue;
 
-		if (strncmp(sym->name, "__cfi_", 6))
+		if (!strstarts(sym->name, "__cfi_"))
 			continue;
 
 		if (!elf_init_reloc_text_sym(file->elf, sec,
@@ -2468,7 +2468,7 @@ static bool is_profiling_func(const char *name)
 	/*
 	 * Many compilers cannot disable KCOV with a function attribute.
 	 */
-	if (!strncmp(name, "__sanitizer_cov_", 16))
+	if (strstarts(name, "__sanitizer_cov_"))
 		return true;
 
 	/*
@@ -2477,7 +2477,7 @@ static bool is_profiling_func(const char *name)
 	 * the __no_sanitize_thread attribute, remove them. Once the kernel's
 	 * minimum Clang version is 14.0, this can be removed.
 	 */
-	if (!strncmp(name, "__tsan_func_", 12) ||
+	if (strstarts(name, "__tsan_func_") ||
 	    !strcmp(name, "__tsan_atomic_signal_fence"))
 		return true;
 
@@ -2492,8 +2492,7 @@ static int classify_symbols(struct objtool_file *file)
 		if (func->bind != STB_GLOBAL)
 			continue;
 
-		if (!strncmp(func->name, STATIC_CALL_TRAMP_PREFIX_STR,
-			     strlen(STATIC_CALL_TRAMP_PREFIX_STR)))
+		if (strstarts(func->name, STATIC_CALL_TRAMP_PREFIX_STR))
 			func->static_call_tramp = true;
 
 		if (arch_is_retpoline(func))
@@ -2528,7 +2527,7 @@ static void mark_rodata(struct objtool_file *file)
 	 * .rodata.str1.* sections are ignored; they don't contain jump tables.
 	 */
 	for_each_sec(file, sec) {
-		if (!strncmp(sec->name, ".rodata", 7) &&
+		if (strstarts(sec->name, ".rodata") &&
 		    !strstr(sec->name, ".str1.")) {
 			sec->rodata = true;
 			found = true;
@@ -3400,7 +3399,7 @@ static inline bool noinstr_call_dest(struct objtool_file *file,
 	 * something 'BAD' happened. At the risk of taking the machine down,
 	 * let them proceed to get the message out.
 	 */
-	if (!strncmp(func->name, "__ubsan_handle_", 15))
+	if (strstarts(func->name, "__ubsan_handle_"))
 		return true;
 
 	return false;
@@ -3531,8 +3530,8 @@ static int validate_branch(struct objtool_file *file, struct symbol *func,
 
 		if (func && insn_func(insn) && func != insn_func(insn)->pfunc) {
 			/* Ignore KCFI type preambles, which always fall through */
-			if (!strncmp(func->name, "__cfi_", 6) ||
-			    !strncmp(func->name, "__pfx_", 6))
+			if (strstarts(func->name, "__cfi_") ||
+			    strstarts(func->name, "__pfx_"))
 				return 0;
 
 			WARN("%s() falls through to next function %s()",
@@ -4401,9 +4400,9 @@ static int validate_ibt(struct objtool_file *file)
 		 * These sections can reference text addresses, but not with
 		 * the intent to indirect branch to them.
 		 */
-		if ((!strncmp(sec->name, ".discard", 8) &&
+		if ((strstarts(sec->name, ".discard") &&
 		     strcmp(sec->name, ".discard.ibt_endbr_noseal"))	||
-		    !strncmp(sec->name, ".debug", 6)			||
+		    strstarts(sec->name, ".debug")			||
 		    !strcmp(sec->name, ".altinstructions")		||
 		    !strcmp(sec->name, ".ibt_endbr_seal")		||
 		    !strcmp(sec->name, ".orc_unwind_ip")		||

  reply	other threads:[~2023-08-04  8:44 UTC|newest]

Thread overview: 15+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-11  9:19 [PATCH v2 0/2] x86/retpoline,kprobes: Fix the [__indirect_thunk_start, ..end] range Petr Pavlu
2023-07-11  9:19 ` [PATCH v2 1/2] x86/retpoline,kprobes: Fix position of thunk sections with CONFIG_LTO_CLANG Petr Pavlu
2023-08-02 14:33   ` [tip: x86/core] " tip-bot2 for Petr Pavlu
2023-08-03 21:55     ` Josh Poimboeuf
2023-08-03 23:03       ` [PATCH] x86/retpoline,kprobes: Fix "Fix position of thunk sections with CONFIG_LTO_CLANG" Andrew Cooper
2023-08-04  8:28         ` Peter Zijlstra
2023-08-04  8:43           ` Peter Zijlstra [this message]
2023-11-10  0:36             ` Josh Poimboeuf
2023-08-14 10:00   ` [tip: x86/urgent] x86/retpoline,kprobes: Fix position of thunk sections with CONFIG_LTO_CLANG tip-bot2 for Petr Pavlu
2023-07-11  9:19 ` [PATCH v2 2/2] x86/retpoline,kprobes: Skip optprobe check for indirect jumps with retpolines and IBT Petr Pavlu
2023-07-11 12:33   ` Masami Hiramatsu
2023-08-02 14:33   ` [tip: x86/core] " tip-bot2 for Petr Pavlu
2023-08-14 10:00   ` [tip: x86/urgent] " tip-bot2 for Petr Pavlu
2023-07-29 15:14 ` [PATCH v2 0/2] x86/retpoline,kprobes: Fix the [__indirect_thunk_start, ..end] range Masami Hiramatsu
2023-07-31 10:22   ` 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=20230804084328.GA220434@hirez.programming.kicks-ass.net \
    --to=peterz@infradead.org \
    --cc=andrew.cooper3@citrix.com \
    --cc=jpoimboe@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=petr.pavlu@suse.com \
    /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