diff options
author | H.J. Lu <hjl.tools@gmail.com> | 2017-09-26 13:49:48 -0700 |
---|---|---|
committer | H.J. Lu <hjl.tools@gmail.com> | 2017-09-26 13:50:01 -0700 |
commit | 592d5c75392e1da170050a4999af0618c4865aed (patch) | |
tree | a0f9b248f75e6be63bf3aa9794e37b01ad6398c4 /elf/Makefile | |
parent | 2d9193f2f55767c71333d425e140e22c3e15dc3d (diff) |
Skip PT_DYNAMIC segment with p_filesz == 0 [BZ #22101]
ELF objects generated with "objcopy --only-keep-debug" have
Type Offset VirtAddr PhysAddr FileSiz MemSiz Flg Align
DYNAMIC 0x0+e28 0x0+200e40 0x0+200e40 0x0+ 0x0+1a0 RW 0x8
with 0 file size. ld.so should skip such PT_DYNAMIC segments.
Without a PT_DYNAMIC segment the loading of the shared object will
fail, and therefore ldd on such objects will also fail instead of
crashing. This provides better diagnostics for tooling that is
attempting to inspect the invalid shared objects which may just
contain debug information.
[BZ #22101]
* elf/Makefile (tests): Add tst-debug1.
($(objpfx)tst-debug1): New.
($(objpfx)tst-debug1.out): Likewise.
($(objpfx)tst-debug1mod1.so): Likewise.
* elf/dl-load.c (_dl_map_object_from_fd): Skip PT_DYNAMIC segment
with p_filesz == 0.
* elf/tst-debug1.c: New file.
Reviewed-by: Carlos O'Donell <carlos@redhat.com>
Diffstat (limited to 'elf/Makefile')
-rw-r--r-- | elf/Makefile | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/elf/Makefile b/elf/Makefile index 7cf959aabd..e21f37e30b 100644 --- a/elf/Makefile +++ b/elf/Makefile @@ -181,7 +181,8 @@ tests += restest1 preloadtest loadfail multiload origtest resolvfail \ tst-initorder tst-initorder2 tst-relsort1 tst-null-argv \ tst-tlsalign tst-tlsalign-extern tst-nodelete-opened \ tst-nodelete2 tst-audit11 tst-audit12 tst-dlsym-error tst-noload \ - tst-latepthread tst-tls-manydynamic tst-nodelete-dlclose + tst-latepthread tst-tls-manydynamic tst-nodelete-dlclose \ + tst-debug1 # reldep9 tests-internal += loadtest unload unload2 circleload1 \ neededtest neededtest2 neededtest3 neededtest4 \ @@ -1417,3 +1418,9 @@ tst-env-setuid-ENV = MALLOC_CHECK_=2 MALLOC_MMAP_THRESHOLD_=4096 \ LD_HWCAP_MASK=0x1 tst-env-setuid-tunables-ENV = \ GLIBC_TUNABLES=glibc.malloc.check=2:glibc.malloc.mmap_threshold=4096 + +$(objpfx)tst-debug1: $(libdl) +$(objpfx)tst-debug1.out: $(objpfx)tst-debug1mod1.so + +$(objpfx)tst-debug1mod1.so: $(objpfx)testobj1.so + $(OBJCOPY) --only-keep-debug $< $@ |