All of lore.kernel.org
 help / color / mirror / Atom feed
From: Ingo Molnar <mingo@kernel.org>
To: Alexandre Chartre <alexandre.chartre@oracle.com>
Cc: Josh Poimboeuf <jpoimboe@kernel.org>,
	tip-bot2 for Ingo Molnar <tip-bot2@linutronix.de>,
	linux-tip-commits@vger.kernel.org,
	"Peter Zijlstra (Intel)" <peterz@infradead.org>,
	linux-kernel@vger.kernel.org, x86@kernel.org
Subject: Re: [tip: objtool/core] objtool: Fix segfault on unknown alternatives
Date: Mon, 1 Dec 2025 21:49:50 +0100	[thread overview]
Message-ID: <aS3_bsNCpnU6RNHG@gmail.com> (raw)
In-Reply-To: <3be480e7-8baf-4196-baf4-b9c29f8ef491@oracle.com>


* Alexandre Chartre <alexandre.chartre@oracle.com> wrote:

> On 12/1/25 21:05, Josh Poimboeuf wrote:
> > On Mon, Dec 01, 2025 at 09:52:51AM +0000, tip-bot2 for Ingo Molnar wrote:
> > > The following commit has been merged into the objtool/core branch of tip:
> > > 
> > > Commit-ID:     6ec33db1aaf06a76fb063610e668f8e12f32ebbf
> > > Gitweb:        https://git.kernel.org/tip/6ec33db1aaf06a76fb063610e668f8e12f32ebbf
> > > Author:        Ingo Molnar <mingo@kernel.org>
> > > AuthorDate:    Mon, 01 Dec 2025 10:42:27 +01:00
> > > Committer:     Ingo Molnar <mingo@kernel.org>
> > > CommitterDate: Mon, 01 Dec 2025 10:42:27 +01:00
> > > 
> > > objtool: Fix segfault on unknown alternatives
> > > 
> > > So 'objtool --link -d vmlinux.o' gets surprised by this endbr64+endbr64 pattern
> > > in ___bpf_prog_run():
> > > 
> > > 	___bpf_prog_run:
> > > 	1e7680:  ___bpf_prog_run+0x0                                                     push   %r12
> > > 	1e7682:  ___bpf_prog_run+0x2                                                     mov    %rdi,%r12
> > > 	1e7685:  ___bpf_prog_run+0x5                                                     push   %rbp
> > > 	1e7686:  ___bpf_prog_run+0x6                                                     xor    %ebp,%ebp
> > > 	1e7688:  ___bpf_prog_run+0x8                                                     push   %rbx
> > > 	1e7689:  ___bpf_prog_run+0x9                                                     mov    %rsi,%rbx
> > > 	1e768c:  ___bpf_prog_run+0xc                                                     movzbl (%rbx),%esi
> > > 	1e768f:  ___bpf_prog_run+0xf                                                     movzbl %sil,%edx
> > > 	1e7693:  ___bpf_prog_run+0x13                                                    mov    %esi,%eax
> > > 	1e7695:  ___bpf_prog_run+0x15                                                    mov    0x0(,%rdx,8),%rdx
> > > 	1e769d:  ___bpf_prog_run+0x1d                                                    jmp    0x1e76a2 <__x86_indirect_thunk_rdx>
> > 
> > The problem is actually that indirect jump.  That's a jump table (not to
> > be confused with a jump *label*) which is an objtool "alt" type which
> > the disas code doesn't seem to know about yet.
> > 
> > They're used for C indirect goto (___bpf_prog_run) and switch
> > statements.  The latter are currently disabled in most x86 configs via
> > -fno-jump-tables.
> > 
> > They're indirect jumps with a known set of jump targets.  It should be
> > possible to graphically display the possible targets with lines and
> > arrows, something similar to "objdump -d --visualize-jumps".
> > 
> > If the code isn't expecting that "alt" type, it might explode in other
> > ways.  So at least for now, those alts need to at least be recognized
> > and ignored.
> 
> I think the problem is with add_jump_table() which 
> creates a struct alternative but doesn't set the 
> type. So it defaults to 0 which is 
> ALT_TYPE_INSTRUCTIONS and then it fails because an 
> alt_group is expected with this type.
> 
> A quick fix is probably to define a new alt_type 
> ALT_TYPE_UNKNOWN = 0 and have disas ignore this type 
> of alternative. I will work on a fix.

Note that we still want the NULL dereference protection 
as well as a fallback, because objtool should always be 
robust against arbitrarily random and faulty input 
data.

Thanks,

	Ingo

      reply	other threads:[~2025-12-01 20:49 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-12-01  9:52 [tip: objtool/core] objtool: Fix segfault on unknown alternatives tip-bot2 for Ingo Molnar
2025-12-01 20:05 ` Josh Poimboeuf
2025-12-01 20:44   ` Alexandre Chartre
2025-12-01 20:49     ` Ingo Molnar [this message]

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=aS3_bsNCpnU6RNHG@gmail.com \
    --to=mingo@kernel.org \
    --cc=alexandre.chartre@oracle.com \
    --cc=jpoimboe@kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-tip-commits@vger.kernel.org \
    --cc=peterz@infradead.org \
    --cc=tip-bot2@linutronix.de \
    --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.