On Mon, Jun 24, 2024 at 4:23 AM Jiri Olsa <olsajiri@xxxxxxxxx> wrote: > > ccing bpf list > > On Fri, Jun 21, 2024 at 09:39:33PM +0300, Alexey Dobriyan wrote: > > Neither ELF spec not ELF loader require program header to be placed > > right after ELF header, but build-id code very much assumes such placement: > > > > See > > > > find_get_page(vma->vm_file->f_mapping, 0); > > > > line and checks against PAGE_SIZE. > > > > Returns errors for now until someone rewrites build-id parser > > to be more inline with load_elf_binary(). > > > > Signed-off-by: Alexey Dobriyan <adobriyan@xxxxxxxxx> > > --- > > > > lib/buildid.c | 14 ++++++++++++++ > > 1 file changed, 14 insertions(+) > > LGTM, but let's please route this through the bpf-next/master tree. Can you please send it to bpf@xxxxxxxxxxxxxxx? Acked-by: Andrii Nakryiko <andrii@xxxxxxxxxx> > > --- a/lib/buildid.c > > +++ b/lib/buildid.c > > @@ -73,6 +73,13 @@ static int get_build_id_32(const void *page_addr, unsigned char *build_id, > > Elf32_Phdr *phdr; > > int i; > > > > + /* > > + * FIXME > > nit, FIXME is usually on the same line as the rest of the comment, > otherwise looks good > > Reviewed-by: Jiri Olsa <jolsa@xxxxxxxxxx> > > thanks, > jirka > > > > + * Neither ELF spec nor ELF loader require that program headers > > + * start immediately after ELF header. > > + */ > > + if (ehdr->e_phoff != sizeof(Elf32_Ehdr)) > > + return -EINVAL; > > /* only supports phdr that fits in one page */ > > if (ehdr->e_phnum > > > (PAGE_SIZE - sizeof(Elf32_Ehdr)) / sizeof(Elf32_Phdr)) > > @@ -98,6 +105,13 @@ static int get_build_id_64(const void *page_addr, unsigned char *build_id, > > Elf64_Phdr *phdr; > > int i; > > > > + /* > > + * FIXME > > + * Neither ELF spec nor ELF loader require that program headers > > + * start immediately after ELF header. > > + */ > > + if (ehdr->e_phoff != sizeof(Elf64_Ehdr)) > > + return -EINVAL; > > /* only supports phdr that fits in one page */ > > if (ehdr->e_phnum > > > (PAGE_SIZE - sizeof(Elf64_Ehdr)) / sizeof(Elf64_Phdr)) >