From: Joe Lawrence <[email protected]>

create_fake_symbols() has two phases: creating symbols from
ANNOTATE_DATA_SPECIAL entries, and a fallback that uses sh_entsize for
special sections like .static_call_sites.

When .discard.annotate_data is absent, the function returns early,
skipping the entsize fallback and silently allowing unsupported
module-local static call keys through.

Fix it by jumping to the entsize phase instead of returning early.

Fixes: dd590d4d57eb ("objtool/klp: Introduce klp diff subcommand for diffing 
object files")
Assisted-by: Claude:claude-4-opus
Signed-off-by: Joe Lawrence <[email protected]>
Signed-off-by: Josh Poimboeuf <[email protected]>
---
 tools/objtool/klp-diff.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/tools/objtool/klp-diff.c b/tools/objtool/klp-diff.c
index 022522cd9b6c..767716766d41 100644
--- a/tools/objtool/klp-diff.c
+++ b/tools/objtool/klp-diff.c
@@ -1375,7 +1375,7 @@ static int create_fake_symbols(struct elf *elf)
 
        sec = find_section_by_name(elf, ".discard.annotate_data");
        if (!sec || !sec->rsec)
-               return 0;
+               goto entsize;
 
        for_each_reloc(sec->rsec, reloc) {
                unsigned long offset, size;
@@ -1407,7 +1407,7 @@ static int create_fake_symbols(struct elf *elf)
        /*
         * 2) Make symbols for sh_entsize, and simple arrays of pointers:
         */
-
+entsize:
        for_each_sec(elf, sec) {
                unsigned int entry_size;
                unsigned long offset;
-- 
2.53.0


Reply via email to