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") ||
next prev parent 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