From: sashiko-bot@kernel.org
To: "Lorenzo Stoakes (ARM)" <ljs@kernel.org>,
"Linus Torvalds" <torvalds@linux-foundation.org>,
"Nathan Chancellor" <nathan@kernel.org>,
"Nicolas Schier" <nsc@kernel.org>,
"Nick Desaulniers" <ndesaulniers@google.com>,
"Bill Wendling" <morbo@google.com>,
"Justin Stitt" <justinstitt@google.com>,
"Geert Uytterhoeven" <geert@linux-m68k.org>,
"Luis Chamberlain" <mcgrof@kernel.org>,
"Petr Pavlu" <petr.pavlu@suse.com>,
"Daniel Gomez" <da.gomez@kernel.org>,
"Sami Tolvanen" <samitolvanen@google.com>,
"Aaron Tomlin" <atomlin@atomlin.com>,
"Josh Poimboeuf" <jpoimboe@kernel.org>,
"Peter Zijlstra" <peterz@infradead.org>,
"Miguel Ojeda" <ojeda@kernel.org>,
"Boqun Feng" <boqun@kernel.org>, "Gary Guo" <gary@garyguo.net>,
"Björn Roy Baron" <bjorn3_gh@protonmail.com>,
"Benno Lossin" <lossin@kernel.org>,
"Andreas Hindborg" <a.hindborg@kernel.org>,
"Alice Ryhl" <aliceryhl@google.com>,
"Trevor Gross" <tmgross@umich.edu>,
"Danilo Krummrich" <dakr@kernel.org>,
"Daniel Almeida" <daniel.almeida@collabora.com>,
"Tamir Duberstein" <tamird@kernel.org>,
"Alexandre Courbot" <acourbot@nvidia.com>,
"Onur Özkan" <work@onurozkan.dev>
Cc: linux-kbuild@vger.kernel.org, linux-m68k@lists.linux-m68k.org,
linux-modules@vger.kernel.org
Subject: Re: [PATCH v5 08/11] objtool: size the instruction hash to the text
Date: Thu, 05 Nov 2026 18:22:23 +0000 [thread overview]
Message-ID: <sashiko-outbox-199750@kernel.org> (raw)
In-Reply-To: <20261104-build-speedup-v5-8-0f6018be8dae@kernel.org>
Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] objtool: unguarded NULL file->insn_hash dereference in find_insn()
--
commit 213d34d383fb04e85ef5c721bf77b5b42b0870d5
Author: Lorenzo Stoakes (ARM) <ljs@kernel.org>
objtool: size the instruction hash to the text
This commit replaces the fixed-size instruction hash table in
struct objtool_file with a dynamically allocated hash table sized
according to the total text section size in decode_instructions().
> diff --git a/tools/objtool/check.c b/tools/objtool/check.c
> index 931c5c412f15d..97250aa361009 100644
> --- a/tools/objtool/check.c
> +++ b/tools/objtool/check.c
> @@ -38,12 +38,22 @@ struct disas_context *objtool_disas_ctx;
>
> size_t sym_name_max_len;
>
> +static struct hlist_head *insn_hash_head(struct objtool_file *file,
> + struct section *sec, unsigned long offset)
> +{
> + /* Determine instruction hash based on section index and offset. */
> + const u32 sec_hash = sec_offset_hash(sec, offset);
> + const u32 hash = hash_min(sec_hash, file->insn_hash_bits);
> +
> + return &file->insn_hash[hash];
> +}
> +
> struct instruction *find_insn(struct objtool_file *file,
> struct section *sec, unsigned long offset)
> {
> struct instruction *insn;
>
> - hash_for_each_possible(file->insn_hash, insn, hash, sec_offset_hash(sec, offset)) {
> + hlist_for_each_entry(insn, insn_hash_head(file, sec, offset), hash) {
> if (insn->sec == sec && insn->offset == offset)
> return insn;
> }
[Severity: Medium]
As reported by Sashiko on v4 [1], can find_insn() dereference a NULL
file->insn_hash pointer if decode_file() fails before reaching
decode_instructions()?
With this change, file->insn_hash is NULL and file->insn_hash_bits is 0
until decode_instructions() calls alloc_insn_hash(). However, in
decode_file(), init_pv_ops() runs before decode_instructions():
tools/objtool/check.c:decode_file() {
if (init_pv_ops(file))
return -1;
/*
* Must be before add_{jump_call}_destination.
*/
if (classify_symbols(file))
return -1;
if (decode_instructions(file))
return -1;
}
If init_pv_ops() -> add_pv_ops() returns -1 (for instance, when
find_symbol_by_offset() returns NULL for a pv_ops table relocation),
check() and cmd_klp_checksum() jump to out: and unconditionally call
free_insns(file) (as well as disas_funcs() when opts.disas is set).
free_insns() then walks all sections via for_each_insn() ->
sec_for_each_insn() -> find_insn(), calling insn_hash_head() with
file->insn_hash == NULL and file->insn_hash_bits == 0, which performs a
32-bit shift by 32 in hash_32() and dereferences NULL in find_insn().
Should find_insn() (or free_insns()) check if (!file->insn_hash) before
looking up instructions?
[1] https://lore.kernel.org/r/20260923-build-speedup-v4-18-73128809a4a4@kernel.org
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261104-build-speedup-v5-0-0f6018be8dae@kernel.org?part=8
next prev parent reply other threads:[~2026-11-05 18:22 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-11-04 18:20 [PATCH v5 00/11] kbuild: significantly speed up kernel builds Lorenzo Stoakes (ARM)
2026-11-04 18:20 ` [PATCH v5 01/11] kbuild: calculate list, composite object state per object Lorenzo Stoakes (ARM)
2026-11-12 4:13 ` Nathan Chancellor
2026-11-04 18:20 ` [PATCH v5 02/11] kbuild: implement and use depcheck to check dependency timestamps Lorenzo Stoakes (ARM)
2026-11-05 18:22 ` sashiko-bot
2026-11-04 18:20 ` [PATCH v5 03/11] modpost: cache section relocation mismatch state Lorenzo Stoakes (ARM)
2026-11-09 16:43 ` Petr Pavlu
2026-11-12 4:13 ` Nathan Chancellor
2026-11-04 18:20 ` [PATCH v5 04/11] modpost: emit module descriptors as assembly Lorenzo Stoakes (ARM)
2026-11-09 16:45 ` Petr Pavlu
2026-11-12 4:13 ` Nathan Chancellor
2026-11-04 18:20 ` [PATCH v5 05/11] kbuild: batch module finalisation Lorenzo Stoakes (ARM)
2026-11-12 4:13 ` Nathan Chancellor
2026-11-04 18:20 ` [PATCH v5 06/11] objtool: do not hash DWARF relocations Lorenzo Stoakes (ARM)
2026-11-04 18:20 ` [PATCH v5 07/11] objtool: cache relocations, do less work, eliminate relocation hash Lorenzo Stoakes (ARM)
2026-11-05 18:22 ` sashiko-bot
2026-11-12 5:45 ` Josh Poimboeuf
2026-11-12 8:00 ` Lorenzo Stoakes (ARM)
2026-11-04 18:20 ` [PATCH v5 08/11] objtool: size the instruction hash to the text Lorenzo Stoakes (ARM)
2026-11-05 18:22 ` sashiko-bot [this message]
2026-11-04 18:20 ` [PATCH v5 09/11] objtool: decode instructions and resolve branch targets in parallel Lorenzo Stoakes (ARM)
2026-11-04 18:20 ` [PATCH v5 10/11] rust: make exports.o depend on the headers generated for it Lorenzo Stoakes (ARM)
2026-11-11 16:04 ` Gary Guo
2026-11-04 18:20 ` [PATCH v5 11/11] kbuild: build rust crates in parallel with the rest of the build Lorenzo Stoakes (ARM)
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=sashiko-outbox-199750@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=a.hindborg@kernel.org \
--cc=acourbot@nvidia.com \
--cc=aliceryhl@google.com \
--cc=atomlin@atomlin.com \
--cc=bjorn3_gh@protonmail.com \
--cc=boqun@kernel.org \
--cc=da.gomez@kernel.org \
--cc=dakr@kernel.org \
--cc=daniel.almeida@collabora.com \
--cc=gary@garyguo.net \
--cc=geert@linux-m68k.org \
--cc=jpoimboe@kernel.org \
--cc=justinstitt@google.com \
--cc=linux-kbuild@vger.kernel.org \
--cc=linux-m68k@lists.linux-m68k.org \
--cc=linux-modules@vger.kernel.org \
--cc=ljs@kernel.org \
--cc=lossin@kernel.org \
--cc=mcgrof@kernel.org \
--cc=morbo@google.com \
--cc=nathan@kernel.org \
--cc=ndesaulniers@google.com \
--cc=nsc@kernel.org \
--cc=ojeda@kernel.org \
--cc=peterz@infradead.org \
--cc=petr.pavlu@suse.com \
--cc=samitolvanen@google.com \
--cc=sashiko-reviews@lists.linux.dev \
--cc=tamird@kernel.org \
--cc=tmgross@umich.edu \
--cc=torvalds@linux-foundation.org \
--cc=work@onurozkan.dev \
/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.