On Mon, 03 Mar 2014 15:31:27 +0100, Mark Wielaard wrote: > --- a/libdwfl/elf-from-memory.c > +++ b/libdwfl/elf-from-memory.c [...] > @@ -195,21 +200,28 @@ elf_from_remote_memory (GElf_Addr ehdr_vma, > bool found_base = false; > switch (ehdr.e32.e_ident[EI_CLASS]) > {
The return value could be documented. > - inline void handle_segment (GElf_Addr vaddr, GElf_Off offset, > - GElf_Xword filesz, GElf_Xword align) > + inline bool handle_segment (GElf_Addr vaddr, GElf_Off offset, > + GElf_Xword filesz, GElf_Xword palign) > { > - GElf_Off segment_end = ((offset + filesz + align - 1) & -align); > + /* Sanity check the alignment requirements. */ > + if ((palign & (pagesize - 1)) != 0 > + || ((vaddr - offset) & (palign - 1)) != 0) > + return true; > + > + GElf_Off segment_end = ((offset + filesz + pagesize - 1) > + & -pagesize); > > if (segment_end > (GElf_Off) contents_size) > contents_size = segment_end; > > - if (!found_base && (offset & -align) == 0) > + if (!found_base && (offset & -pagesize) == 0) > { > - loadbase = ehdr_vma - (vaddr & -align); > + loadbase = ehdr_vma - (vaddr & -pagesize); > found_base = true; > } > > segments_end = offset + filesz; > + return false; > } > > case ELFCLASS32: I agree with the patch. Thanks, Jan