Merge tag 'objtool-urgent-2026-09-13' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip

Pull objtool fixes from Ingo Molnar:

 - Fix potential klp-build allocation leak in cleanup
   functionality handling kzalloc() failure (Yafang Shao)

 - Fix KLP checksum false positives triggering with GCC, caused
   by quirks in string literal symbol generation (Josh Poimboeuf)

* tag 'objtool-urgent-2026-09-13' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip:
  objtool/klp: Fix checksums for constant pool references
  klp-build: Fix wrong index in funcs cleanup error path
This commit is contained in:
Linus Torvalds
2026-09-13 08:37:11 -07:00
2 changed files with 22 additions and 1 deletions
+1 -1
View File
@@ -51,7 +51,7 @@ static int __init livepatch_mod_init(void)
if (!funcs) {
ret = -ENOMEM;
for (int j = 0; j < i; j++)
kfree(objs[i].funcs);
kfree(objs[j].funcs);
goto err_free_objs;
}
+21
View File
@@ -54,6 +54,19 @@ static int checksum_debug_init(struct objtool_file *file)
return 0;
}
/*
* Detect a reference to anonymous constant pool data which the compiler places
* in .rodata.cst<num> and which either has an .LC<num> symbol associated with
* it or (with Clang) no symbol at all. These are typically initializers for
* local function stack data, so they're considered part of the function rather
* than data per se.
*/
static bool is_anonymous_const_data(struct symbol *sym)
{
return strstarts(sym->sec->name, ".rodata.cst") &&
(is_sec_sym(sym) || strstarts(sym->name, ".LC"));
}
static void checksum_update_insn(struct objtool_file *file, struct symbol *func,
struct instruction *insn)
{
@@ -129,6 +142,14 @@ static void checksum_update_insn(struct objtool_file *file, struct symbol *func,
goto alts;
}
if (is_anonymous_const_data(sym)) {
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)