]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
objtool: Fix "unexpected end of section" warning for alternatives
authorJosh Poimboeuf <jpoimboe@kernel.org>
Wed, 17 Sep 2025 16:03:30 +0000 (09:03 -0700)
committerJosh Poimboeuf <jpoimboe@kernel.org>
Tue, 14 Oct 2025 21:45:24 +0000 (14:45 -0700)
Due to the short circuiting logic in next_insn_to_validate(), control
flow may silently transition from .altinstr_replacement to .text without
a corresponding nested call to validate_branch().

As a result the validate_branch() 'sec' variable doesn't get
reinitialized, which can trigger a confusing "unexpected end of section"
warning which blames .altinstr_replacement rather than the offending
fallthrough function.

Fix that by not caching the section.  There's no point in doing that
anyway.

Acked-by: Petr Mladek <pmladek@suse.com>
Tested-by: Joe Lawrence <joe.lawrence@redhat.com>
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
tools/objtool/check.c

index 65eb90034d3ee3480917325997b8f498f928218e..c2e46f901a5379639d8a30551ab7928321a220b6 100644 (file)
@@ -3512,15 +3512,12 @@ static int validate_branch(struct objtool_file *file, struct symbol *func,
 {
        struct alternative *alt;
        struct instruction *next_insn, *prev_insn = NULL;
-       struct section *sec;
        u8 visited;
        int ret;
 
        if (func && func->ignore)
                return 0;
 
-       sec = insn->sec;
-
        while (1) {
                next_insn = next_insn_to_validate(file, insn);
 
@@ -3760,7 +3757,7 @@ static int validate_branch(struct objtool_file *file, struct symbol *func,
 
                        WARN("%s%sunexpected end of section %s",
                             func ? func->name : "", func ? "(): " : "",
-                            sec->name);
+                            insn->sec->name);
                        return 1;
                }