[PATCH] Avoid mapping past end of shared object (BZ #18685)
H.J. Lu
hjl.tools@gmail.com
Fri Jul 17 03:15:00 GMT 2015
On Thu, Jul 16, 2015 at 1:00 AM, Siddhesh Poyarekar <siddhesh@redhat.com> wrote:
> Some valid ELF objects, like .debug files may refer to sections
> outside themselves since they're loaded and patched up to their parent
> ELF. Calling ldd on them may result in a segfault since it may try to
> read beyond the end of the mapping. Red Hat bz:
>
> https://bugzilla.redhat.com/show_bug.cgi?id=741105
>
> has an example, although I haven't been able to find a sample
> reproducer file immediately. This patch has been carried in Fedora
> and RHEL for a couple of years now. Also tested on x86_64 to verify
> that there are no regressions.
>
> [BZ #18685]
> * sysdeps/generic/dl-fileid.h (_dl_get_file_id): Accept
> pointer to a struct stat64.
> * sysdeps/posix/dl-fileid.h (_dl_get_file_id): Likewise.
> * elf/dl-load.c (_dl_map_object_from_fd): Avoid mapping past
> end of ELF file.
If I understand it correctly, ld.so crashes on an ELF file with segment headers
where file offset is larger than the file itself. Isn't it the same
as a corrupted
ELF file with segment headers where file offset is larger than the file itself?
I can create such a file with a binary editor.
How should ld.so deal with such ELF files?
H.J.
More information about the Libc-alpha
mailing list