From: Ihor Solodrai <ihor.solodrai@linux.dev>
To: Naveed Khan <naveed@digiscrypt.com>, bpf@vger.kernel.org
Subject: Re: [PATCH] libbpf: reject linker STT_SECTION symbols with out-of-range st_shndx
Date: Thu, 16 Jul 2026 17:53:18 -0700 [thread overview]
Message-ID: <a97bbf70-ac5f-4a32-bd85-5cb2bdbff00f@linux.dev> (raw)
In-Reply-To: <178394859382.2.942623981274846749@digiscrypt.com>
On 7/13/26 6:16 AM, Naveed Khan wrote:
> linker_sanity_check_elf_symtab() only validates a symbol's st_shndx
> against the section count when it is below SHN_LORESERVE:
>
> if (sym->st_shndx < SHN_LORESERVE && sym->st_shndx >= obj->sec_cnt)
> return -EINVAL;
>
> For a STT_SECTION symbol the following check only rejects a non-zero
> st_value, so a section symbol carrying a reserved index such as
> SHN_ABS (0xfff1) with st_value == 0 passes validation.
>
> When a relocation references such a symbol, linker_append_elf_relos()
> indexes the per-object section array with no bound check:
>
> if (ELF64_ST_TYPE(src_sym->st_info) == STT_SECTION) {
> struct src_sec *sec = &obj->secs[src_sym->st_shndx];
> ...
> insn->imm += sec->dst_off;
>
> obj->secs holds only obj->sec_cnt entries, so obj->secs[0xfff1]
> dereferences memory tens of thousands of entries past the allocation
> (reading sec->dst_off) when linking a crafted relocatable object,
> an out-of-bounds read that faults or folds unrelated heap contents
> into the patched instruction.
>
> A STT_SECTION symbol must reference a real section, so reject one whose
> st_shndx is not a valid section index. Reserved indices are always
>> = SHN_LORESERVE, which exceeds sec_cnt, and the in-range case is
> already handled above, so a single sec_cnt bound closes the gap without
> affecting valid inputs.
>
> Signed-off-by: Naveed Khan <naveed@digiscrypt.com>
> ---
> diff --git a/tools/lib/bpf/linker.c b/tools/lib/bpf/linker.c
> index 78f92c3929..8a93faa41d 100644
> --- a/tools/lib/bpf/linker.c
> +++ b/tools/lib/bpf/linker.c
> @@ -973,7 +973,7 @@ static int linker_sanity_check_elf_symtab(struct src_obj *obj, struct src_sec *s
> return -EINVAL;
> }
> if (sym_type == STT_SECTION) {
> - if (sym->st_value != 0)
> + if (sym->st_value != 0 || sym->st_shndx >= obj->sec_cnt)
As far as I can tell, this is only a problem when the ELF object is
corrupted. If you don't have a user report, or at least an example of
a normally compiled ELF object that can cause a crash, it's a NACK.
libbpf does not aim to be a safe parser for arbitrary malformed ELF.
pw-bot: cr
..An unsolicited piece of advice unrelated to the patch:
I checked your email on lore, and it appears you are a new contributor
trying to land similar patches across multiple subsystems. And I'm
pretty sure AI finds these bugs for you by inspecting code, and then
generates patches.
I can understand the motivation to get your name out, but this is not
a good way to do it.
Pick an area that interests you, or (if you don't have a preference)
pick something useful and/or neglected, like selftests. Read the
mailing list to understand what areas need work. Then figure out how
to actually improve the system, not just fix random unimportant
bugs. Come up with a strategy and start small. Use AI, but also try to
actually learn what's going on, don't just relay the output.
Good luck!
> return -EINVAL;
> continue;
> }
prev parent reply other threads:[~2026-07-17 0:53 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-07-13 13:16 [PATCH] libbpf: reject linker STT_SECTION symbols with out-of-range st_shndx Naveed Khan
2026-07-13 13:35 ` sashiko-bot
2026-07-17 0:53 ` Ihor Solodrai [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=a97bbf70-ac5f-4a32-bd85-5cb2bdbff00f@linux.dev \
--to=ihor.solodrai@linux.dev \
--cc=bpf@vger.kernel.org \
--cc=naveed@digiscrypt.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox