From: Joe Lawrence <joe.lawrence@redhat.com>
To: Josh Poimboeuf <jpoimboe@kernel.org>
Cc: live-patching@vger.kernel.org, linux-kernel@vger.kernel.org,
x86@kernel.org, Miroslav Benes <mbenes@suse.cz>,
Petr Mladek <pmladek@suse.com>, Jiri Kosina <jikos@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
Marcos Paulo de Souza <mpdesouza@suse.com>,
Song Liu <song@kernel.org>
Subject: Re: [RFC 00/31] objtool, livepatch: Livepatch module generation
Date: Fri, 13 Sep 2024 10:39:18 -0400 [thread overview]
Message-ID: <ZuROlpVFO3OE9o1r@redhat.com> (raw)
In-Reply-To: <ZuLwJIgt4nsQKvqZ@redhat.com>
On Thu, Sep 12, 2024 at 09:44:04AM -0400, Joe Lawrence wrote:
> On Wed, Sep 11, 2024 at 12:39:42AM -0700, Josh Poimboeuf wrote:
> > On Mon, Sep 02, 2024 at 08:59:43PM -0700, Josh Poimboeuf wrote:
> > > Hi,
> > >
> > > Here's a new way to build livepatch modules called klp-build.
> > >
> > > I started working on it when I realized that objtool already does 99% of
> > > the work needed for detecting function changes.
> > >
> > > This is similar in concept to kpatch-build, but the implementation is
> > > much cleaner.
> > >
> > > Personally I still have reservations about the "source-based" approach
> > > (klp-convert and friends), including the fragility and performance
> > > concerns of -flive-patching. I would submit that klp-build might be
> > > considered the "official" way to make livepatch modules.
> > >
> > > Please try it out and let me know what you think. Based on v6.10.
> > >
> > > Also avaiable at:
> > >
> > > git://git.kernel.org/pub/scm/linux/kernel/git/jpoimboe/linux.git klp-build-rfc
> >
> > Here's an updated branch with a bunch of fixes. It's still incompatible
> > with BTF at the moment, otherwise it should (hopefully) fix the rest of
> > the issues reported so far.
> >
> > While the known bugs are fixed, I haven't finished processing all the
> > review comments yet. Once that happens I'll post a proper v2.
> >
> > git://git.kernel.org/pub/scm/linux/kernel/git/jpoimboe/linux.git klp-build-v1.5
>
> Hi Josh,
>
> I've had much better results with v1.5, thanks for collecting up those
> fixes in a branch.
>
Today's experiment used the centos-stream-10's kernel config with
CONFIG_MODULE_ALLOW_BTF_MISMATCH=y and cs-10's gcc (GCC) 14.2.1 20240801
(Red Hat 14.2.1-1).
First, more gcc nits (running top-level `make`):
check.c: In function ‘decode_instructions’:
check.c:410:54: error: ‘calloc’ sizes specified with ‘sizeof’ in the earlier argument and not in the later argument [-Werror=calloc-transposed-args]
410 | insns = calloc(sizeof(*insn), INSN_CHUNK_SIZE);
| ^
check.c:410:54: note: earlier argument should specify number of elements, later size of each element
check.c: In function ‘init_pv_ops’:
check.c:551:38: error: ‘calloc’ sizes specified with ‘sizeof’ in the earlier argument and not in the later argument [-Werror=calloc-transposed-args]
551 | file->pv_ops = calloc(sizeof(struct pv_state), nr);
| ^~~~~~
check.c:551:38: note: earlier argument should specify number of elements, later size of each element
-->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8--
diff --git a/tools/objtool/check.c b/tools/objtool/check.c
index 63c2d6c06..c6f192859 100644
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -407,7 +407,7 @@ static void decode_instructions(struct objtool_file *file)
for (offset = 0; offset < sec_size(sec); offset += insn->len) {
if (!insns || idx == INSN_CHUNK_MAX) {
- insns = calloc(sizeof(*insn), INSN_CHUNK_SIZE);
+ insns = calloc(INSN_CHUNK_SIZE, sizeof(*insn));
ERROR_ON(!insns, "calloc");
idx = 0;
@@ -548,7 +548,7 @@ static void init_pv_ops(struct objtool_file *file)
return;
nr = sym->len / sizeof(unsigned long);
- file->pv_ops = calloc(sizeof(struct pv_state), nr);
+ file->pv_ops = calloc(nr, sizeof(struct pv_state));
ERROR_ON(!file->pv_ops, "calloc");
for (idx = 0; idx < nr; idx++)
-->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8--
and now a happy build of objtool.
The top-level `make` moves onto building all the kernel objects, but
then objtool vmlinux.o crashes:
$ gdb --args ./tools/objtool/objtool --sym-checksum --hacks=jump_label --hacks=noinstr --hacks=skylake --ibt --orc --retpoline --rethunk --static-call --uaccess --prefix=16 --link vmlinux.o
Program received signal SIGSEGV, Segmentation fault.
ignore_unreachable_insn (file=0x435ea0 <file>, insn=0x1cd928c0) at check.c:3980
3980 if (prev_insn->dead_end &&
(gdb) bt
#0 ignore_unreachable_insn (file=0x435ea0 <file>, insn=0x1cd928c0) at check.c:3980
#1 validate_reachable_instructions (file=0x435ea0 <file>) at check.c:4452
#2 check (file=file@entry=0x435ea0 <file>) at check.c:4610
#3 0x0000000000412d4f in objtool_run (argc=<optimized out>, argc@entry=14, argv=argv@entry=0x7fffffffdd78) at builtin-check.c:206
#4 0x0000000000417f9b in main (argc=14, argv=0x7fffffffdd78) at objtool.c:131
(gdb) p prev_insn
$1 = (struct instruction *) 0x0
which I worked around by copying a similar conditional check on
prev_insn after calling prev_insn_same_sec():
-->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8--
diff --git a/tools/objtool/check.c b/tools/objtool/check.c
index 63c2d6c06..c6f192859 100644
--- a/tools/objtool/check.c
+++ b/tools/objtool/check.c
@@ -3977,7 +3977,7 @@ static bool ignore_unreachable_insn(struct objtool_file *file, struct instructio
* It may also insert a UD2 after calling a __noreturn function.
*/
prev_insn = prev_insn_same_sec(file, insn);
- if (prev_insn->dead_end &&
+ if (prev_insn && prev_insn->dead_end &&
(insn->type == INSN_BUG ||
(insn->type == INSN_JUMP_UNCONDITIONAL &&
insn->jump_dest && insn->jump_dest->type == INSN_BUG)))
-->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8-- -->8--
and now a happy kernel build and boot.
A klp-build of the usual cmdline.patch succeeds, however it generates
some strange relocations:
Relocation section '.rela.text' at offset 0x238 contains 6 entries:
Offset Info Type Symbol's Value Symbol's Name + Addend
0000000000000016 0000004600000004 R_X86_64_PLT32 0000000000000000 __kmalloc_noprof - 4
0000000000000035 0000004e00000004 R_X86_64_PLT32 0000000000000000 __fentry__ - 4
000000000000003c 0000000000000000 R_X86_64_NONE -4
Relocation section '.rela.klp.relocs' at offset 0x1168 contains 2 entries:
Offset Info Type Symbol's Value Symbol's Name + Addend
0000000000000000 0000000700000001 R_X86_64_64 0000000000000000 .text + 3c
0000000000000008 0000000000000001 R_X86_64_64 -4
Relocation section '.klp.rela.h..text' at offset 0x53f18 contains 1 entry:
Offset Info Type Symbol's Value Symbol's Name + Addend
000000000000003c 0000000000000002 R_X86_64_PC32 -4
No bueno. FWIW, Song's 0001-test-klp.patch does seem to build w/o odd
relocations and it loads fine.
--
Joe
next prev parent reply other threads:[~2024-09-13 14:39 UTC|newest]
Thread overview: 94+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-09-03 3:59 [RFC 00/31] objtool, livepatch: Livepatch module generation Josh Poimboeuf
2024-09-03 3:59 ` [RFC 01/31] x86/alternative: Refactor INT3 call emulation selftest Josh Poimboeuf
2024-09-03 3:59 ` [RFC 02/31] x86/module: Improve relocation error messages Josh Poimboeuf
2024-09-03 3:59 ` [RFC 03/31] x86/kprobes: Remove STACK_FRAME_NON_STANDARD annotation Josh Poimboeuf
2024-09-03 3:59 ` [RFC 04/31] kernel/sys: Don't reference UTS_RELEASE directly Josh Poimboeuf
2024-09-03 3:59 ` [RFC 05/31] x86/compiler: Tweak __UNIQUE_ID naming Josh Poimboeuf
2024-09-03 7:56 ` Peter Zijlstra
2024-09-04 2:01 ` Josh Poimboeuf
2024-09-08 19:43 ` David Laight
2024-09-03 3:59 ` [RFC 06/31] elfnote: Use __UNIQUE_ID() for note symbols Josh Poimboeuf
2024-09-03 3:59 ` [RFC 07/31] kbuild: Remove "kmod" prefix from __KBUILD_MODNAME Josh Poimboeuf
2024-09-03 7:58 ` Peter Zijlstra
2024-09-04 2:11 ` Josh Poimboeuf
2024-09-04 7:53 ` Peter Zijlstra
2024-09-03 3:59 ` [RFC 08/31] objtool: Remove .parainstructions reference Josh Poimboeuf
2024-09-03 3:59 ` [RFC 09/31] objtool: Const string cleanup Josh Poimboeuf
2024-09-03 3:59 ` [RFC 10/31] objtool: Use 'struct elf' in elf macros Josh Poimboeuf
2024-09-03 3:59 ` [RFC 11/31] objtool: Add section/symbol type helpers Josh Poimboeuf
2024-09-03 3:59 ` [RFC 12/31] objtool: 'objname' refactoring Josh Poimboeuf
2024-09-03 3:59 ` [RFC 13/31] objtool: Support references to all symbol types in special sections Josh Poimboeuf
2024-09-03 3:59 ` [RFC 14/31] objtool: Refactor add_jump_destinations() Josh Poimboeuf
2024-09-03 3:59 ` [RFC 15/31] objtool: Interval tree cleanups Josh Poimboeuf
2024-09-03 3:59 ` [RFC 16/31] objtool: Simplify fatal error handling Josh Poimboeuf
2024-09-03 4:00 ` [RFC 17/31] objtool: Open up the elf API Josh Poimboeuf
2024-09-03 4:00 ` [RFC 18/31] objtool: Disallow duplicate prefix symbols Josh Poimboeuf
2024-09-03 4:00 ` [RFC 19/31] objtool: Add elf_create_file() Josh Poimboeuf
2024-09-03 4:00 ` [RFC 20/31] objtool: Add UD1 detection Josh Poimboeuf
2024-09-03 8:17 ` Peter Zijlstra
2024-09-04 2:25 ` Josh Poimboeuf
2024-09-03 4:00 ` [RFC 21/31] objtool: Fix x86 addend calcuation Josh Poimboeuf
2024-09-04 9:24 ` laokz
2024-09-04 16:15 ` Josh Poimboeuf
2024-09-03 4:00 ` [RFC 22/31] objtool: Make find_symbol_containing() less arbitrary Josh Poimboeuf
2024-09-03 4:00 ` [RFC 23/31] objtool: Handle __pa_symbol() relocations Josh Poimboeuf
2024-09-03 4:00 ` [RFC 24/31] objtool: Make STACK_FRAME_NON_STANDARD consistent Josh Poimboeuf
2024-09-03 4:00 ` [RFC 25/31] objtool: Fix interval tree insertion for zero-length symbols Josh Poimboeuf
2024-09-03 4:00 ` [RFC 26/31] objtool: Make interval tree functions "static inline" Josh Poimboeuf
2024-09-03 4:00 ` [RFC 27/31] objtool: Fix weak symbol detection Josh Poimboeuf
2024-09-03 8:26 ` Peter Zijlstra
2024-09-04 3:55 ` Josh Poimboeuf
2024-09-04 7:42 ` Peter Zijlstra
2024-09-04 16:03 ` Josh Poimboeuf
2024-09-03 4:00 ` [RFC 28/31] x86/alternative: Create symbols for special section entries Josh Poimboeuf
2024-09-03 8:29 ` Peter Zijlstra
2024-09-04 4:28 ` Josh Poimboeuf
2024-09-04 8:08 ` Peter Zijlstra
2024-09-04 16:13 ` Josh Poimboeuf
2024-09-04 12:39 ` Borislav Petkov
2024-09-04 16:44 ` Josh Poimboeuf
2024-09-06 10:19 ` Borislav Petkov
2024-09-06 16:53 ` Josh Poimboeuf
2024-09-06 6:51 ` [RFC 28/31] x86/alternative: Create symbols for special section entrie Weinan Liu
2024-09-07 6:28 ` Josh Poimboeuf
2024-09-03 4:00 ` [RFC 29/31] objtool: Calculate function checksums Josh Poimboeuf
2024-09-04 7:54 ` Peter Zijlstra
2024-09-04 16:11 ` Josh Poimboeuf
2024-09-03 4:00 ` [RFC 30/31] livepatch: Enable -ffunction-sections -fdata-sections Josh Poimboeuf
2024-09-03 4:00 ` [RFC 31/31] objtool, livepatch: Livepatch module generation Josh Poimboeuf
2024-09-04 21:38 ` Jeff Johnson
2024-09-05 4:15 ` Josh Poimboeuf
2024-09-12 2:39 ` laokz
2024-09-03 17:32 ` [RFC 00/31] " Song Liu
2024-09-04 4:30 ` Josh Poimboeuf
2024-09-04 5:26 ` Song Liu
2024-09-04 6:37 ` Josh Poimboeuf
2024-09-04 7:09 ` Josh Poimboeuf
2024-09-04 20:23 ` Song Liu
2024-09-04 20:59 ` Josh Poimboeuf
2024-09-04 21:32 ` Song Liu
2024-09-05 4:13 ` Josh Poimboeuf
2024-09-05 7:13 ` Josh Poimboeuf
2024-09-05 21:34 ` Song Liu
2024-09-07 6:46 ` Josh Poimboeuf
2024-09-07 17:43 ` Song Liu
2024-09-07 20:14 ` Josh Poimboeuf
2024-09-08 5:04 ` Song Liu
2024-09-09 21:19 ` Josh Poimboeuf
2024-09-09 21:43 ` Song Liu
2024-09-06 13:56 ` Joe Lawrence
2024-09-06 17:00 ` Josh Poimboeuf
2024-09-06 21:01 ` Joe Lawrence
2024-09-06 22:45 ` Josh Poimboeuf
2024-09-07 1:47 ` Josh Poimboeuf
2024-09-07 14:17 ` Joe Lawrence
2024-09-11 7:39 ` Josh Poimboeuf
2024-09-12 13:44 ` Joe Lawrence
2024-09-13 14:39 ` Joe Lawrence [this message]
2024-09-13 23:09 ` Josh Poimboeuf
2024-09-11 13:27 ` Petr Mladek
2024-09-11 16:20 ` Josh Poimboeuf
2024-09-12 16:05 ` Song Liu
2024-09-13 18:16 ` [External] " A K M Fazla Mehrab .
2024-09-17 7:12 ` Petr Mladek
2024-09-23 2:29 ` Chen Zhongjin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ZuROlpVFO3OE9o1r@redhat.com \
--to=joe.lawrence@redhat.com \
--cc=jikos@kernel.org \
--cc=jpoimboe@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=live-patching@vger.kernel.org \
--cc=mbenes@suse.cz \
--cc=mpdesouza@suse.com \
--cc=peterz@infradead.org \
--cc=pmladek@suse.com \
--cc=song@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.