libbpf: Validate ELF symbol table entry size

elf_sym_iter_new() calculates the number of symbols by dividing the
symbol table data size by sh_entsize. A malformed ELF file with a zero
sh_entsize causes a division by zero.

Reject symbol table sections with a zero entry size before calculating
the number of symbols.

Signed-off-by: Luis Vieira <luisflavieira@gmail.com>
Signed-off-by: Andrii Nakryiko <andrii@kernel.org>
Link: https://lore.kernel.org/bpf/20260916-libbpf-elf-entsize-fix-v1-1-cf181da33eab@gmail.com
This commit is contained in:
Luis Vieira 2026-09-16 18:23:35 -03:00 committed by Andrii Nakryiko
parent 7f2b0b57a8
commit 6892723c5e

View File

@ -115,7 +115,7 @@ static int elf_sym_iter_new(struct elf_sym_iter *iter,
return -ENOENT;
}
if (!gelf_getshdr(scn, &sh))
if (!gelf_getshdr(scn, &sh) || !sh.sh_entsize)
return -EINVAL;
iter->strtabidx = sh.sh_link;