Adding a line of code to __link_shadow_page() with a literal string
causes a false positive changed function with GCC:

  arch/x86/kvm/kvm.ko.o: changed function: kvm_tdp_mmu_map_private_pfn

While the patch only touched __link_shadow_page(), the string addition
triggered a rename of .LC64 -> .LC65 in kvm_tdp_mmu_map_private_pfn()
even though the underlying referenced constant data didn't change.

So for .LC* symbols, the suffix is arbitrary but the data isn't.  Add
the underlying data to the checksum calculation rather than the symbol
name.

Fixes: 0d83da43b1e1 ("objtool/klp: Add --checksum option to generate 
per-function checksums")
Signed-off-by: Josh Poimboeuf <[email protected]>
---
 tools/objtool/klp-checksum.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/tools/objtool/klp-checksum.c b/tools/objtool/klp-checksum.c
index b8e47f28997e9..359fd27616013 100644
--- a/tools/objtool/klp-checksum.c
+++ b/tools/objtool/klp-checksum.c
@@ -129,6 +129,14 @@ static void checksum_update_insn(struct objtool_file 
*file, struct symbol *func,
                goto alts;
        }
 
+       if (strstarts(sym->name, ".LC")) {
+               void *cst;
+
+               cst = sym->sec->data->d_buf + sym->offset + offset;
+               __checksum_update_insn(func, insn, cst, 
sym->sec->sh.sh_entsize);
+               goto alts;
+       }
+
        if (is_sec_sym(sym)) {
                sym = find_symbol_containing(reloc->sym->sec, offset);
                if (!sym)
-- 
2.55.0


Reply via email to