]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
objtool/klp: fix data alignment in __clone_symbol()
authorJoe Lawrence <joe.lawrence@redhat.com>
Tue, 10 Mar 2026 20:37:40 +0000 (16:37 -0400)
committerJosh Poimboeuf <jpoimboe@kernel.org>
Mon, 16 Mar 2026 19:39:45 +0000 (12:39 -0700)
Commit 356e4b2f5b80 ("objtool: Fix data alignment in elf_add_data()")
corrected the alignment of data within a section (honoring the section's
sh_addralign).  Apply the same alignment when klp-diff mode clones a
symbol, adjusting the new symbol's offset for the output section's
sh_addralign.

Fixes: dd590d4d57eb ("objtool/klp: Introduce klp diff subcommand for diffing object files")
Signed-off-by: Joe Lawrence <joe.lawrence@redhat.com>
Link: https://patch.msgid.link/20260310203751.1479229-2-joe.lawrence@redhat.com
Signed-off-by: Josh Poimboeuf <jpoimboe@kernel.org>
tools/objtool/klp-diff.c

index a3198a63c2f0d7339985bcf471911ffd6f4396c9..c2c4e4968bc26447021940f950d79fa14e4dec78 100644 (file)
@@ -14,6 +14,7 @@
 #include <objtool/util.h>
 #include <arch/special.h>
 
+#include <linux/align.h>
 #include <linux/objtool_types.h>
 #include <linux/livepatch_external.h>
 #include <linux/stringify.h>
@@ -560,7 +561,7 @@ static struct symbol *__clone_symbol(struct elf *elf, struct symbol *patched_sym
                }
 
                if (!is_sec_sym(patched_sym))
-                       offset = sec_size(out_sec);
+                       offset = ALIGN(sec_size(out_sec), out_sec->sh.sh_addralign);
 
                if (patched_sym->len || is_sec_sym(patched_sym)) {
                        void *data = NULL;