]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
objtool: Fix init_module() handling
authorJosh Poimboeuf <jpoimboe@kernel.org>
Mon, 24 Mar 2025 21:55:56 +0000 (14:55 -0700)
committerIngo Molnar <mingo@kernel.org>
Tue, 25 Mar 2025 08:20:26 +0000 (09:20 +0100)
If IBT is enabled and a module uses the deprecated init_module() magic
function name rather than module_init(fn), its ENDBR will get removed,
causing an IBT failure during module load.

Objtool does print an obscure warning, but then does nothing to either
correct it or return an error.

Improve the usefulness of the warning and return an error so it will at
least fail the build with CONFIG_OBJTOOL_WERROR.

Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
Signed-off-by: Ingo Molnar <mingo@kernel.org>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Link: https://lore.kernel.org/r/366bfdbe92736cde9fb01d5d3eb9b98e9070a1ec.1742852846.git.jpoimboe@kernel.org
tools/objtool/check.c

index b2f6a7ff77b50cb86d723efb938fed18d709031e..2f7aff1c367dcc9fcfd654bc6be17f2129696344 100644 (file)
@@ -828,8 +828,11 @@ static int create_ibt_endbr_seal_sections(struct objtool_file *file)
                if (opts.module && sym && sym->type == STT_FUNC &&
                    insn->offset == sym->offset &&
                    (!strcmp(sym->name, "init_module") ||
-                    !strcmp(sym->name, "cleanup_module")))
-                       WARN("%s(): not an indirect call target", sym->name);
+                    !strcmp(sym->name, "cleanup_module"))) {
+                       WARN("%s(): Magic init_module() function name is deprecated, use module_init(fn) instead",
+                            sym->name);
+                       return -1;
+               }
 
                if (!elf_init_reloc_text_sym(file->elf, sec,
                                             idx * sizeof(int), idx,