glibc/elf
Florian Weimer 1bdce25455 elf: Handle ld.so with LOAD segment gaps in _dl_find_object (bug 31943)
Detect if ld.so not contiguous and handle that case in _dl_find_object.
Set l_find_object_processed even for initially loaded link maps,
otherwise dlopen of an initially loaded object adds it to
_dlfo_loaded_mappings (where maps are expected to be contiguous),
in addition to _dlfo_nodelete_mappings.

Test elf/tst-link-map-contiguous-ldso iterates over the loader
image, reading every word to make sure memory is actually mapped.
It only does that if the l_contiguous flag is set for the link map.
Otherwise, it finds gaps with mmap and checks that _dl_find_object
does not return the ld.so mapping for them.

The test elf/tst-link-map-contiguous-main does the same thing for
the libc.so shared object.  This only works if the kernel loaded
the main program because the glibc dynamic loader may fill
the gaps with PROT_NONE mappings in some cases, making it contiguous,
but accesses to individual words may still fault.

Test elf/tst-link-map-contiguous-libc is again slightly different
because the dynamic loader always fills the gaps with PROT_NONE
mappings, so a different form of probing has to be used.

Reviewed-by: Adhemerval Zanella  <adhemerval.zanella@linaro.org>
(cherry picked from commit 20681be149)
2025-08-14 09:08:15 +02:00
..
tst-glibc-hwcaps-2-cache.root
tst-glibc-hwcaps-cache.root
tst-glibc-hwcaps-prepend-cache.root
tst-ldconfig-bad-aux-cache.root
tst-ldconfig-ld_so_conf-update.root
tst-rootdir.root
Makefile
Versions
argv0test.c
cache.c
chroot_canon.c
circleload1.c
circlemod1.c
circlemod1a.c
circlemod2.c
circlemod2a.c
circlemod3.c
circlemod3a.c
constload1.c
constload2.c
constload3.c
dblload.c
dblloadmod1.c
dblloadmod2.c
dblloadmod3.c
dblunload.c
dep1.c
dep2.c
dep3.c
dep4.c
dl-addr-obj.c
dl-addr.c
dl-audit.c
dl-brk.c
dl-cache.c
dl-call-libc-early-init.c
dl-call_fini.c
dl-catch.c
dl-close.c
dl-compat.c
dl-debug-symbols.S
dl-debug.c
dl-deps.c
dl-diagnostics-cpu.c
dl-diagnostics-kernel.c
dl-diagnostics.c
dl-diagnostics.h
dl-dst.h
dl-early_allocate.c
dl-environ.c
dl-exception.c
dl-execstack.c
dl-find_object.c
dl-find_object.h
dl-fini.c
dl-fptr.c
dl-hwcaps-subdirs.c
dl-hwcaps.c
dl-hwcaps.h
dl-hwcaps_split.c
dl-init.c
dl-is_dso.h
dl-iteratephdr.c
dl-libc.c
dl-libc_freeres.c
dl-load.c
dl-load.h
dl-lookup-direct.c
dl-lookup.c
dl-machine-reject-phdr.h
dl-main.h
dl-map-segments.h
dl-minimal-malloc.c
dl-minimal.c
dl-misc.c
dl-mutex.c
dl-object.c
dl-open.c
dl-origin.c
dl-printf.c
dl-profile.c
dl-profstub.c
dl-reloc-static-pie.c
dl-reloc.c
dl-runtime.c
dl-runtime.h
dl-sbrk.c
dl-scope.c
dl-setup_hash.c
dl-sort-maps.c
dl-static-tls.h
dl-support.c
dl-sym-post.h
dl-sym.c
dl-symaddr.c
dl-sysdep-open.h
dl-sysdep.c
dl-thread_gscope_wait.c
dl-tls.c
dl-tls_init_tp.c
dl-trampoline.c
dl-tunable-types.h
dl-tunables.c
dl-tunables.h
dl-tunables.list
dl-unmap-segments.h
dl-usage.c
dl-version.c
dl-write.c
dl-writev.h
do-rel.h
dso-sort-tests-1.def
dso-sort-tests-2.def
dynamic-link.h
elf.h
enbl-secure.c
failobj.c
filter.c
filtmod1.c
filtmod2.c
firstobj.c
gen-trusted-dirs.awk
genrtldtbl.awk
get-dynamic-info.h
global.c
globalmod1.c
ifuncdep1.c
ifuncdep1pic.c
ifuncdep2.c
ifuncdep2pic.c
ifuncdep5.c
ifuncdep5pic.c
ifuncmain1.c
ifuncmain1pic.c
ifuncmain1picstatic.c
ifuncmain1pie.c
ifuncmain1static.c
ifuncmain1staticpic.c
ifuncmain1staticpie.c
ifuncmain1vis.c
ifuncmain1vispic.c
ifuncmain1vispie.c
ifuncmain2.c
ifuncmain2pic.c
ifuncmain2picstatic.c
ifuncmain2static.c
ifuncmain3.c
ifuncmain4.c
ifuncmain4picstatic.c
ifuncmain4static.c
ifuncmain5.c
ifuncmain5pic.c
ifuncmain5picstatic.c
ifuncmain5pie.c
ifuncmain5static.c
ifuncmain5staticpic.c
ifuncmain6pie.c
ifuncmain7.c
ifuncmain7pic.c
ifuncmain7picstatic.c
ifuncmain7pie.c
ifuncmain7static.c
ifuncmain9.c
ifuncmain9pic.c
ifuncmain9picstatic.c
ifuncmain9pie.c
ifuncmain9static.c
ifuncmod1.c
ifuncmod3.c
ifuncmod5.c
ifuncmod6.c
initfirst.c
interp.c
lateglobal.c
ldconfig.c
ldd.bash.in
libc-dl_find_object.c
libc-early-init.h
libc_early_init.c
libtracemod1-1.c
libtracemod2-1.c
libtracemod3-1.c
libtracemod4-1.c
libtracemod5-1.c
link.h
loadfail.c
loadtest.c
ltglobmod1.c
ltglobmod2.c
markermodMARKER-VALUE.c
multiload.c
neededobj1.c
neededobj2.c
neededobj3.c
neededobj4.c
neededobj5.c
neededobj6.c
neededtest.c
neededtest2.c
neededtest3.c
neededtest4.c
next.c
nextmod1.c
nextmod2.c
nextmod3.c
nextmod3.map
nodel2mod1.c
nodel2mod2.c
nodel2mod3.c
nodelete.c
nodelete2.c
nodelmod1.c
nodelmod2.c
nodelmod3.c
nodelmod4.c
nodlopen.c
nodlopen2.c
nodlopenmod.c
nodlopenmod2.c
noload.c
order.c
order2.c
order2mod1.c
order2mod2.c
order2mod3.c
order2mod4.c
origtest.c
pathoptobj.c
pldd-xx.c
pldd.c
preloadtest.c
readelflib.c
readlib.c
reldep.c
reldep2.c
reldep3.c
reldep4.c
reldep4mod1.c
reldep4mod2.c
reldep4mod3.c
reldep4mod4.c
reldep5.c
reldep6.c
reldep6mod0.c
reldep6mod1.c
reldep6mod2.c
reldep6mod3.c
reldep6mod4.c
reldep7.c
reldep7mod1.c
reldep7mod2.c
reldep8.c
reldep8mod1.c
reldep8mod2.c
reldep8mod3.c
reldep9.c
reldep9mod1.c
reldep9mod2.c
reldep9mod3.c
reldepmod1.c
reldepmod2.c
reldepmod3.c
reldepmod4.c
reldepmod5.c
reldepmod6.c
resolvfail.c
restest1.c
restest2.c
rtld-Rules
rtld-debugger-interface.txt
rtld.c
rtld_static_init.c
setup-vdso.h
simple-dl-hash.h
simple-dl-new-hash.h
sln.c
sofini.c
sotruss-lib.c
sotruss.sh
sprof.c
static-stubs.c
stringtable.c
stringtable.h
stringtable_free.c
testobj.h
testobj1.c
testobj1_1.c
testobj2.c
testobj3.c
testobj4.c
testobj5.c
testobj6.c
tlsdeschtab.h
tst-_dl_addr_inside_object.c
tst-absolute-sym-lib.c
tst-absolute-sym-lib.lds
tst-absolute-sym.c
tst-absolute-zero-lib.c
tst-absolute-zero-lib.lds
tst-absolute-zero.c
tst-addr1.c
tst-align.c
tst-align2.c
tst-align3.c
tst-alignmod.c
tst-alignmod2.c
tst-alignmod3.c
tst-array1-static.c
tst-array1.c
tst-array1.exp
tst-array2.c
tst-array2.exp
tst-array2dep.c
tst-array3.c
tst-array4.c
tst-array4.exp
tst-array5-static.c
tst-array5-static.exp
tst-array5.c
tst-array5.exp
tst-array5dep.c
tst-audit-tlsdesc-dlopen.c
tst-audit-tlsdesc-mod1.c
tst-audit-tlsdesc-mod2.c
tst-audit-tlsdesc.c
tst-audit1.c
tst-audit2.c
tst-audit8.c
tst-audit9.c
tst-audit11.c
tst-audit11mod1.c
tst-audit11mod2.c
tst-audit11mod2.map
tst-audit12.c
tst-audit12mod1.c
tst-audit12mod2.c
tst-audit12mod2.map
tst-audit12mod3.c
tst-audit13.c
tst-audit13mod1.c
tst-audit14.c
tst-audit14.exp
tst-audit14a.c
tst-audit15.c
tst-audit15.exp
tst-audit16.c
tst-audit16.exp
tst-audit17.c
tst-audit18.c
tst-audit18mod.c
tst-audit19a.c
tst-audit19b.c
tst-audit19bmod.c
tst-audit20.c
tst-audit21.c
tst-audit22.c
tst-audit23.c
tst-audit23mod.c
tst-audit24a.c
tst-audit24amod1.c
tst-audit24amod2.c
tst-audit24b.c
tst-audit24bmod1.c
tst-audit24bmod2.c
tst-audit24c.c
tst-audit24d.c
tst-audit24dmod1.c
tst-audit24dmod2.c
tst-audit24dmod3.c
tst-audit24dmod4.c
tst-audit25.h
tst-audit25a.c
tst-audit25b.c
tst-audit25mod1.c
tst-audit25mod2.c
tst-audit25mod3.c
tst-audit25mod4.c
tst-audit28.c
tst-auditlogmod-1.c
tst-auditlogmod-2.c
tst-auditlogmod-3.c
tst-auditmany.c
tst-auditmanymod.h
tst-auditmanymod1.c
tst-auditmanymod2.c
tst-auditmanymod3.c
tst-auditmanymod4.c
tst-auditmanymod5.c
tst-auditmanymod6.c
tst-auditmanymod7.c
tst-auditmanymod8.c
tst-auditmanymod9.c
tst-auditmod-tlsdesc.c
tst-auditmod1.c
tst-auditmod9a.c
tst-auditmod9b.c
tst-auditmod11.c
tst-auditmod12.c
tst-auditmod17.c
tst-auditmod18.c
tst-auditmod19a.c
tst-auditmod19b.c
tst-auditmod20.c
tst-auditmod21a.c
tst-auditmod21b.c
tst-auditmod22.c
tst-auditmod23.c
tst-auditmod24.h
tst-auditmod24a.c
tst-auditmod24b.c
tst-auditmod24c.c
tst-auditmod24d.c
tst-auditmod25.c
tst-auditmod28.c
tst-auxobj-dlopen.c
tst-auxobj.c
tst-auxv.c
tst-auxvalmod.c
tst-big-note-lib.S
tst-big-note.c
tst-create_format1.c
tst-debug1.c
tst-deep1.c
tst-deep1mod1.c
tst-deep1mod2.c
tst-deep1mod3.c
tst-dl-hash.c
tst-dl-hwcaps_split.c
tst-dl-is_dso.c
tst-dl-iter-static.c
tst-dl-printf-static.c
tst-dl_find_object-mod1.c
tst-dl_find_object-mod2.c
tst-dl_find_object-mod3.c
tst-dl_find_object-mod4.c
tst-dl_find_object-mod5.c
tst-dl_find_object-mod6.c
tst-dl_find_object-mod7.c
tst-dl_find_object-mod8.c
tst-dl_find_object-mod9.c
tst-dl_find_object-static.c
tst-dl_find_object-threads.c
tst-dl_find_object.c
tst-dlclose-lazy-mod1.c
tst-dlclose-lazy-mod2.c
tst-dlclose-lazy.c
tst-dlmodcount.c
tst-dlmopen-dlerror-mod.c
tst-dlmopen-dlerror.c
tst-dlmopen-gethostbyname-mod.c
tst-dlmopen-gethostbyname.c
tst-dlmopen-twice-mod1.c
tst-dlmopen-twice-mod2.c
tst-dlmopen-twice.c
tst-dlmopen1.c
tst-dlmopen1mod.c
tst-dlmopen2.c
tst-dlmopen3.c
tst-dlmopen4.c
tst-dlopen-nodelete-reloc-mod1.c
tst-dlopen-nodelete-reloc-mod2.c
tst-dlopen-nodelete-reloc-mod3.c
tst-dlopen-nodelete-reloc-mod4.c
tst-dlopen-nodelete-reloc-mod5.c
tst-dlopen-nodelete-reloc-mod6.cc
tst-dlopen-nodelete-reloc-mod7.cc
tst-dlopen-nodelete-reloc-mod8.c
tst-dlopen-nodelete-reloc-mod9.cc
tst-dlopen-nodelete-reloc-mod10.c
tst-dlopen-nodelete-reloc-mod11.cc
tst-dlopen-nodelete-reloc-mod12.cc
tst-dlopen-nodelete-reloc-mod13.cc
tst-dlopen-nodelete-reloc-mod13.h
tst-dlopen-nodelete-reloc-mod14.cc
tst-dlopen-nodelete-reloc-mod15.cc
tst-dlopen-nodelete-reloc-mod16.c
tst-dlopen-nodelete-reloc-mod17.c
tst-dlopen-nodelete-reloc.c
tst-dlopen-nodelete-reloc.h
tst-dlopen-pie.c
tst-dlopen-self-container.c
tst-dlopen-self-pie.c
tst-dlopen-self.c
tst-dlopen-sgid-mod.c
tst-dlopen-sgid.c
tst-dlopen-tlsmodid-container.c
tst-dlopen-tlsmodid-pie.c
tst-dlopen-tlsmodid.c
tst-dlopen-tlsmodid.h
tst-dlopenfail-2.c
tst-dlopenfail.c
tst-dlopenfaillinkmod.c
tst-dlopenfailmod1.c
tst-dlopenfailmod2.c
tst-dlopenfailmod3.c
tst-dlopenfailnodelmod.c
tst-dlopenrpath.c
tst-dlopenrpathmod.c
tst-dlsym-error.c
tst-dst-static.c
tst-env-setuid-tunables.c
tst-env-setuid.c
tst-execstack-mod.c
tst-execstack-needed.c
tst-execstack-prog.c
tst-execstack.c
tst-filterobj-aux.c
tst-filterobj-dlopen.c
tst-filterobj-filtee.c
tst-filterobj-filtee.h
tst-filterobj-flt.c
tst-filterobj.c
tst-finilazyfailmod.c
tst-getauxval-static.c
tst-glibc-hwcaps-2-cache.c
tst-glibc-hwcaps-2-cache.script
tst-glibc-hwcaps-cache.c
tst-glibc-hwcaps-cache.script
tst-glibc-hwcaps-mask.c
tst-glibc-hwcaps-prepend-cache.c
tst-glibc-hwcaps-prepend.c
tst-glibc-hwcaps.c
tst-glibcelf.py
tst-global1.c
tst-global2.c
tst-globalmod2.c
tst-gnu2-tls1.c
tst-gnu2-tls1mod.c
tst-ifunc-fault-bindnow.c
tst-ifunc-fault-lazy.c
tst-ifunc-textrel.c
tst-initfinilazyfail.c
tst-initlazyfailmod.c
tst-initorder.c
tst-initorder.exp
tst-initorder2.c
tst-initorder2.exp
tst-initordera1.c
tst-initordera2.c
tst-initordera3.c
tst-initordera4.c
tst-initorderb1.c
tst-initorderb2.c
tst-latepthread.c
tst-latepthreadmod.c
tst-ldconfig-X.sh
tst-ldconfig-bad-aux-cache.c
tst-ldconfig-ld-mod.c
tst-ldconfig-ld_so_conf-update.c
tst-ldconfig-p.sh
tst-ldconfig-soname-lib-with-soname.c
tst-ldconfig-soname-lib-without-soname.c
tst-ldconfig-soname.sh
tst-leaks1.c
tst-link-map-contiguous-ldso.c
tst-link-map-contiguous-libc.c
tst-link-map-contiguous-main.c
tst-linkall-static.c
tst-main1.c
tst-main1mod.c
tst-next-ver.c
tst-nodelete-dlclose-dso.c
tst-nodelete-dlclose-plugin.c
tst-nodelete-dlclose.c
tst-nodelete-opened-lib.c
tst-nodelete-opened.c
tst-nodelete-rtldmod.cc
tst-nodelete-uniquemod.cc
tst-nodelete-zmod.cc
tst-nodelete.cc
tst-nodelete2.c
tst-nodelete2mod.c
tst-noload.c
tst-null-argv-lib.c
tst-null-argv.c
tst-order-a1.c
tst-order-a2.c
tst-order-a3.c
tst-order-a4.c
tst-order-b1.c
tst-order-b2.c
tst-order-main.c
tst-p_align.h
tst-p_align1.c
tst-p_align2.c
tst-p_align3.c
tst-p_align3.sh
tst-p_alignmod-base.c
tst-p_alignmod3.c
tst-pathopt.c
tst-pathopt.sh
tst-pie1.c
tst-pie2.c
tst-piemod1.c
tst-pldd.c
tst-preload-pthread-libc.c
tst-protected1a.c
tst-protected1b.c
tst-protected1mod.h
tst-protected1moda.c
tst-protected1modb.c
tst-ptrguard1-static.c
tst-ptrguard1.c
tst-recursive-tls.c
tst-recursive-tlsmallocmod.c
tst-recursive-tlsmodN.c
tst-relr-mod2.c
tst-relr-mod3a.c
tst-relr-mod3b.c
tst-relr-mod4a.c
tst-relr-mod4b.c
tst-relr-mod4b.map
tst-relr-pie.c
tst-relr.c
tst-relr2.c
tst-relr3.c
tst-relr4.c
tst-relro-symbols.py
tst-relsort1.c
tst-relsort1mod1.c
tst-relsort1mod2.c
tst-ro-dynamic-mod.c
tst-ro-dynamic-mod.map
tst-ro-dynamic.c
tst-rootdir-lib.c
tst-rootdir.c
tst-rootdir.script
tst-rtld-argv0.sh
tst-rtld-list-tunables.exp
tst-rtld-list-tunables.sh
tst-rtld-load-self.sh
tst-rtld-preload.sh
tst-rtld-run-static.c
tst-single_threaded-mod1.c
tst-single_threaded-mod2.c
tst-single_threaded-mod3.c
tst-single_threaded-mod4.c
tst-single_threaded-pthread-static.c
tst-single_threaded-pthread.c
tst-single_threaded-static-dlopen.c
tst-single_threaded-static.c
tst-single_threaded.c
tst-sonamemove-dlopen.c
tst-sonamemove-link.c
tst-sonamemove-linkmod1.c
tst-sonamemove-linkmod1.map
tst-sonamemove-runmod1.c
tst-sonamemove-runmod1.map
tst-sonamemove-runmod2.c
tst-sonamemove-runmod2.map
tst-sprof-basic.c
tst-sprof-basic.sh
tst-sprof-mod.c
tst-stackguard1-static.c
tst-stackguard1.c
tst-stringtable.c
tst-thrlock.c
tst-tls-allocation-failure-static.c
tst-tls-dlinfo.c
tst-tls-ie-dlmopen.c
tst-tls-ie-mod.h
tst-tls-ie-mod0.c
tst-tls-ie-mod1.c
tst-tls-ie-mod2.c
tst-tls-ie-mod3.c
tst-tls-ie-mod4.c
tst-tls-ie-mod5.c
tst-tls-ie-mod6.c
tst-tls-ie.c
tst-tls-manydynamic.c
tst-tls-manydynamic.h
tst-tls-manydynamicmod.c
tst-tls-surplus.c
tst-tls1-static-non-pie.c
tst-tls1-static.c
tst-tls1.c
tst-tls2-static.c
tst-tls3.c
tst-tls4.c
tst-tls5.c
tst-tls6.c
tst-tls7.c
tst-tls8.c
tst-tls9-static.c
tst-tls9.c
tst-tls10.c
tst-tls10.h
tst-tls11.c
tst-tls12.c
tst-tls13.c
tst-tls14.c
tst-tls15.c
tst-tls16.c
tst-tls17.c
tst-tls18.c
tst-tls19.c
tst-tls19mod1.c
tst-tls19mod2.c
tst-tls19mod3.c
tst-tls20.c
tst-tls20mod-bad.c
tst-tls21.c
tst-tls21mod.c
tst-tlsalign-extern-static.c
tst-tlsalign-extern.c
tst-tlsalign-lib.c
tst-tlsalign-static.c
tst-tlsalign-vars.c
tst-tlsalign.c
tst-tlsgap-mod0.c
tst-tlsgap-mod1.c
tst-tlsgap-mod2.c
tst-tlsgap.c
tst-tlsmod1.c
tst-tlsmod2.c
tst-tlsmod3.c
tst-tlsmod4.c
tst-tlsmod5.c
tst-tlsmod6.c
tst-tlsmod7.c
tst-tlsmod8.c
tst-tlsmod9.c
tst-tlsmod10.c
tst-tlsmod11.c
tst-tlsmod12.c
tst-tlsmod13.c
tst-tlsmod13a.c
tst-tlsmod14a.c
tst-tlsmod14b.c
tst-tlsmod15a.c
tst-tlsmod15b.c
tst-tlsmod16a.c
tst-tlsmod16b.c
tst-tlsmod17a.c
tst-tlsmod17b.c
tst-tlsmod18a.c
tst-trace1.exp
tst-trace2.exp
tst-trace3.exp
tst-trace4.exp
tst-trace5.exp
tst-unique1.c
tst-unique1mod1.c
tst-unique1mod2.c
tst-unique2.c
tst-unique2mod1.c
tst-unique2mod2.c
tst-unique3.cc
tst-unique3.h
tst-unique3lib.cc
tst-unique3lib2.cc
tst-unique4.cc
tst-unique4.h
tst-unique4lib.cc
tst-unwind-ctor-lib.c
tst-unwind-ctor.c
tst-unwind-main.c
tst-valgrind-smoke.sh
unload.c
unload2.c
unload2dep.c
unload2mod.c
unload3.c
unload3mod1.c
unload3mod2.c
unload3mod3.c
unload3mod4.c
unload4.c
unload4mod1.c
unload4mod2.c
unload4mod3.c
unload4mod4.c
unload5.c
unload6.c
unload6mod1.c
unload6mod2.c
unload6mod3.c
unload7.c
unload7mod1.c
unload7mod2.c
unload8.c
unload8mod1.c
unload8mod1x.c
unload8mod2.c
unload8mod3.c
unloadmod.c
valgrind-test.c
vismain.c
vismod.h
vismod1.c
vismod2.c
vismod3.c