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 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.