aboutsummaryrefslogtreecommitdiff
path: root/elf/dl-load.c
AgeCommit message (Collapse)AuthorFilesLines
2017-03-01Narrowing the visibility of libc-internal.h even further.Zack Weinberg1-1/+1
posix/wordexp-test.c used libc-internal.h for PTR_ALIGN_DOWN; similar to what was done with libc-diag.h, I have split the definitions of cast_to_integer, ALIGN_UP, ALIGN_DOWN, PTR_ALIGN_UP, and PTR_ALIGN_DOWN to a new header, libc-pointer-arith.h. It then occurred to me that the remaining declarations in libc-internal.h are mostly to do with early initialization, and probably most of the files including it, even in the core code, don't need it anymore. Indeed, only 19 files actually need what remains of libc-internal.h. 23 others need libc-diag.h instead, and 12 need libc-pointer-arith.h instead. No file needs more than one of them, and 16 don't need any of them! So, with this patch, libc-internal.h stops including libc-diag.h as well as losing the pointer arithmetic macros, and all including files are adjusted. * include/libc-pointer-arith.h: New file. Define cast_to_integer, ALIGN_UP, ALIGN_DOWN, PTR_ALIGN_UP, and PTR_ALIGN_DOWN here. * include/libc-internal.h: Definitions of above macros moved from here. Don't include libc-diag.h anymore either. * posix/wordexp-test.c: Include stdint.h and libc-pointer-arith.h. Don't include libc-internal.h. * debug/pcprofile.c, elf/dl-tunables.c, elf/soinit.c, io/openat.c * io/openat64.c, misc/ptrace.c, nptl/pthread_clock_gettime.c * nptl/pthread_clock_settime.c, nptl/pthread_cond_common.c * string/strcoll_l.c, sysdeps/nacl/brk.c * sysdeps/unix/clock_settime.c * sysdeps/unix/sysv/linux/i386/get_clockfreq.c * sysdeps/unix/sysv/linux/ia64/get_clockfreq.c * sysdeps/unix/sysv/linux/powerpc/get_clockfreq.c * sysdeps/unix/sysv/linux/sparc/sparc64/get_clockfreq.c: Don't include libc-internal.h. * elf/get-dynamic-info.h, iconv/loop.c * iconvdata/iso-2022-cn-ext.c, locale/weight.h, locale/weightwc.h * misc/reboot.c, nis/nis_table.c, nptl_db/thread_dbP.h * nscd/connections.c, resolv/res_send.c, soft-fp/fmadf4.c * soft-fp/fmasf4.c, soft-fp/fmatf4.c, stdio-common/vfscanf.c * sysdeps/ieee754/dbl-64/e_lgamma_r.c * sysdeps/ieee754/dbl-64/k_rem_pio2.c * sysdeps/ieee754/flt-32/e_lgammaf_r.c * sysdeps/ieee754/flt-32/k_rem_pio2f.c * sysdeps/ieee754/ldbl-128/k_tanl.c * sysdeps/ieee754/ldbl-128ibm/k_tanl.c * sysdeps/ieee754/ldbl-96/e_lgammal_r.c * sysdeps/ieee754/ldbl-96/k_tanl.c, sysdeps/nptl/futex-internal.h: Include libc-diag.h instead of libc-internal.h. * elf/dl-load.c, elf/dl-reloc.c, locale/programs/locarchive.c * nptl/nptl-init.c, string/strcspn.c, string/strspn.c * malloc/malloc.c, sysdeps/i386/nptl/tls.h * sysdeps/nacl/dl-map-segments.h, sysdeps/x86_64/atomic-machine.h * sysdeps/unix/sysv/linux/spawni.c * sysdeps/x86_64/nptl/tls.h: Include libc-pointer-arith.h instead of libc-internal.h. * elf/get-dynamic-info.h, sysdeps/nacl/dl-map-segments.h * sysdeps/x86_64/atomic-machine.h: Add multiple include guard.
2017-01-01Update copyright dates with scripts/update-copyrights.Joseph Myers1-1/+1
2016-11-23elf: Assume TLS is initialized in _dl_map_object_from_fdFlorian Weimer1-47/+7
libc.so uses TLS data, so when dlopen is called later, the TLS data structures have already been initialized.
2016-01-04Update copyright dates with scripts/update-copyrights.Joseph Myers1-1/+1
2015-11-10NaCl: Use open_resource API for shared objectsRoland McGrath1-7/+37
2015-11-09ld.so: Add original DSO name if overridden by audit module [BZ #18251]Florian Weimer1-5/+28
* elf/dl-load.c (_dl_map_object_from_fd): Add additional parameter for original name of the DSO. Add it to the name list of the DSO if it is actually given. (_dl_map_object): Keep track of whether an audit module rewrote the file name. If yes, pass the original name to _dl_map_object_from_fd in a new parameter, otherwise NULL. When debugging is enabled, log the change of the file name. * sysdeps/mach/hur/dl-sysdep.c: Adjust commented-out call to _dl_map_object_from_fd. * elf/Makefile: Build and run tst-audit11 and tst-audit12. * elf/tst-audit11.c: New file * elf/tst-auditmod11.c: New file. * elf/tst-audit11mod1.c: New file. * elf/tst-audit11mod2.c: New file. * elf/tst-audit11mod2.map: New file. * elf/tst-audit12.c: New file * elf/tst-auditmod12.c: New file. * elf/tst-audit12mod1.c: New file. * elf/tst-audit12mod2.c: New file. * elf/tst-audit12mod2.map: New file. * elf/tst-audit12mod3.c: New file.
2015-09-18Use ALIGN_* macros in _dl_map_object_from_fd.Carlos O'Donell1-4/+4
Cleanup _dl_map_object_from_fd to make it clear exactly what we're doing with the mappings i.e. extending the the start of the map down to a page boundary, extending the end of the map up to a page boundary, and offset itself also to page boundary. The result is much easier to read as expected from the ALIGN_* cleanups.
2015-07-14Factor file identity rules out of generic rtld code.Roland McGrath1-10/+8
2015-01-25Fix segmentation fault when LD_LIBRARY_PATH contains only non-existings pathsBram1-3/+3
2015-01-21Fix recursive dlopen.Carlos O'Donell1-9/+5
The ability to recursively call dlopen is useful for malloc implementations that wish to load other dynamic modules that implement reentrant/AS-safe functions to use in their own implementation. Given that a user malloc implementation may be called by an ongoing dlopen to allocate memory the user malloc implementation interrupts dlopen and if it calls dlopen again that's a reentrant call. This patch fixes the issues with the ld.so.cache mapping and the _r_debug assertion which prevent this from working as expected. See: https://sourceware.org/ml/libc-alpha/2014-12/msg00446.html
2015-01-02Update copyright dates with scripts/update-copyrights.Joseph Myers1-1/+1
2014-10-31Add a hook to enable load-time inspection of program headersMatthew Fortune1-0/+6
This hook can be used to perform additional compatibility checks between shared libraries by inspecting custom program header information. * elf/dl-machine-reject-phdr.h: New file. * elf/dl-load.c: #include that. (open_verify): Call elf_machine_reject_phdr_p and ignore the file if that returned true.
2014-10-28elf/dl-load.c: Use __strdup.Carlos O'Donell1-19/+5
During a refactoring pass several repeated blocks of code in dl-load.c were turned into a call to a local function named local_strdup. There is no need for local_strdup, and the routines should instead call __strdup. This change does just that. We call the internal symbol __strdup because calling strdup is unsafe. The user might be using a standard that doesn't include strdup and may have defined this symbol in their application. During a static link we might reference the user defined symbol and crash if it doesn't implement a standards conforming strdup. The resulting code is simpler to understand, and makes it easier to debug. No regressions on x86_64. 2014-10-28 Carlos O'Donell <carlos@redhat.com> * dl-load.c (local_strdup): Remove. (expand_dynamic_string_token): Use __strdup. (decompose_rpath): Likewise. (_dl_map_object): Likewise.
2014-10-10Don't use INTVARDEF/INTUSE with __libc_enable_secure (bug 14132).Joseph Myers1-7/+7
Continuing the removal of the obsolete INTDEF / INTVARDEF / INTUSE mechanism, this patch replaces its use for __libc_enable_secure with the use of rtld_hidden_data_def and rtld_hidden_proto. Tested for x86_64 that installed stripped shared libraries are unchanged by the patch. [BZ #14132] * elf/dl-sysdep.c (__libc_enable_secure): Use rtld_hidden_data_def instead of INTVARDEF. (_dl_sysdep_start): Do not use INTUSE with __libc_enable_secure. * sysdeps/mach/hurd/dl-sysdep.c (__libc_enable_secure): Use rtld_hidden_data_def instead of INTVARDEF. (_dl_sysdep_start): Do not use INTUSE with __libc_enable_secure. * elf/dl-deps.c (expand_dst): Likewise. * elf/dl-load.c (_dl_dst_count): Likewise. (_dl_dst_substitute): Likewise. (decompose_rpath): Likewise. (_dl_init_paths): Likewise. (open_path): Likewise. (_dl_map_object): Likewise. * elf/rtld.c (dl_main): Likewise. (process_dl_audit): Likewise. (process_envvars): Likewise. * include/unistd.h [IS_IN_rtld] (__libc_enable_secure_internal): Remove declaration. (__libc_enable_secure): Use rtld_hidden_proto.
2014-10-09remove nested functions from elf/dl-load.cKostya Serebryany1-36/+52
2014-05-27Remove second argument from TLS_INIT_TP macroAndreas Schwab1-1/+1
2014-04-03Factor mmap/munmap of PT_LOAD segments out of _dl_map_object_from_fd et al.Roland McGrath1-198/+23
2014-03-272014-03-27 Paul Pluzhnikov <ppluzhnikov@google.com>Paul Pluzhnikov1-10/+8
* elf/dl-load.c: Finish conversion of __builtin_expect into __glibc_{un}likely.
2014-03-262014-03-26 Paul Pluzhnikov <ppluzhnikov@google.com>Paul Pluzhnikov1-40/+36
* elf/dl-load.c: Convert __builtin_expect into __glibc_{un}likely.
2014-03-24Fix BZ #16634.Paul Pluzhnikov1-12/+24
An application that erroneously tries to repeatedly dlopen("a.out", ...) may hit assertion failure: Inconsistency detected by ld.so: dl-tls.c: 474: _dl_allocate_tls_init: Assertion `listp != ((void *)0)' failed! dlopen() actually fails with "./a.out: cannot dynamically load executable", but it does so after incrementing dl_tls_max_dtv_idx. Once we run out of TLS_SLOTINFO_SURPLUS (62), we exit with above assertion failure. 2014-03-24 Paul Pluzhnikov <ppluzhnikov@google.com> [BZ #16634] * elf/dl-load.c (open_verify): Add mode parameter. Error early when ET_EXEC and mode does not have __RTLD_OPENEXEC. (open_path): Change from boolean 'secure' to complete flag 'mode' (_dl_map_object): Adjust. * elf/Makefile (tests): Add tst-dlopen-aout. * elf/tst-dlopen-aout.c: New test.
2014-03-122014-03-12 Paul Pluzhnikov <ppluzhnikov@google.com>Paul Pluzhnikov1-2/+2
[BZ #16381] * elf/Makefile (tests): Add tst-pie2. (tests-pie): Add tst-pie2. * elf/tst-pie2.c: New file. * elf/dl-load.c (_dl_map_object_from_fd): Assert correct l_type for ET_EXEC. * elf/rtld.c (map_doit): Load executable as lt_executable. (dl_main): Likewise.
2014-02-10Use glibc_likely instead __builtin_expect.Ondřej Bílka1-25/+25
2014-01-31[BZ #16046] Static dlopen correction fallout fixes.Maciej W. Rozycki1-10/+4
Fixes to address issues from BZ #15022 resolution, as follows: * TLS updates to csu/libc-tls.c -- we now have a proper main map, so there's no longer a need to create a separate fake one to keep TLS structures, * random updates to elf/dl-close.c -- LM_ID_BASE is now a valid name space ID for static executables as well, so assert that we don't unload the main map. Similarly dl_nns isn't supposed to be 0 for static executables anymore, * actual BZ #16046 fix to elf/dl-iteratephdr.c -- the dl_iterate_phdr special function for static executables isn't needed anymore, provided that l_phdr and l_phnum members of the main map have been properly initialized (done in _dl_non_dynamic_init in elf/dl-support.c now), * ld.so.cache loader update to elf/dl-load.c -- GL(dl_ns)[LM_ID_BASE]._ns_loaded is now always initialized in static executables so can become the fallback loader map to check for DF_1_NODEFLIB, provided that the l_flags_1 member of the main map has been properly initialized (done in elf/dl-support.c now); this also ensures previous semantics elsewhere in elf/dl-load.c, * matching updates to elf/dl-support.c -- to complement the two fixes above.
2014-01-08Obvious comment typo fix ("openened") in elf/dl-load.c.Brooks Moses1-1/+1
2014-01-01Update copyright notices with scripts/update-copyrightsAllan McRae1-1/+1
2013-12-02Return fixed version of breaking of RPATH when $ORIGIN contains colonsOndřej Bílka1-10/+16
2013-11-18Revert b75891075bece24be9fd85618f18af4a2daf7f1cOndřej Bílka1-16/+10
2013-11-18Fix breaking of RPATH when $ORIGIN contains colons. Fixes bug 10253Ondřej Bílka1-10/+16
We first expanded origin and then split string by colons. This misbehaves when $ORIGIN contain colon so we first split string, then expand $ORIGIN.
2013-08-21Fix typos.Ondřej Bílka1-1/+1
2013-06-28Test for mprotect failure in dl-load.c (bug 12492).Pierre Ynard1-1/+5
2013-06-28[BZ #15022] Correct global-scope dlopen issues in static executables.Maciej W. Rozycki1-7/+1
This change creates a link map in static executables to serve as the global search list for dlopen. It fixes a problem with the inability to access the global symbol object and a crash on an attempt to map a DSO into the global scope. Some code that has become dead after the addition of this link map is removed too and test cases are provided.
2013-05-29Avoid crashing in LD_DEBUG when program name is unavailableSiddhesh Poyarekar1-3/+2
Resolves: #15465 The program name may be unavailable if the user application tampers with argc and argv[]. Some parts of the dynamic linker caters for this while others don't, so this patch consolidates the check and fallback into a single macro and updates all users.
2013-04-11Fix invalid free of memory allocated during rtld initAndreas Schwab1-0/+6
2013-01-02Update copyright notices with scripts/update-copyrights.Joseph Myers1-1/+1
2012-11-26Cast to __intptr_t before casting pointer to int64H.J. Lu1-1/+2
2012-10-30Invoke DL_AFTER_LOAD if definedChris Metcalf1-0/+4
This hook is useful for any arch-specific functionality that should be done on loaded objects. For the tile architecture, the hook is already provided (though we switch to using the new macro name with this commit) and implements a simulator notifier so that the simulator can load Elf symbols to match the object and generate better error messages for PC's. Also, remove a spurious definition of DL_UNMAP in dl-runtime.c
2012-10-20Retry read in ld.so if the entire ELF header is not read inSiddhesh Poyarekar1-2/+12
[BZ #13601] A read operation could return less than requested data for a number of reasons.
2012-10-03Clean up conditionalize of ld.so.cache support.Roland McGrath1-5/+7
2012-10-02Use ElfW(Off) rather than off_t for offsets within ELF files.Roland McGrath1-2/+2
2012-08-15Fix dl-load.c for [!_LIBC_REENTRANT] case.Roland McGrath1-0/+2
2012-07-27Add SystemTap static probes to the runtime linker. [BZ #14298]Gary Benson1-3/+6
2012-04-11New ld.so argument --inhibit-ldcache to disable ld.so.cache lookupSiddhesh Poyarekar1-2/+3
It may sometimes be desirable to make the dynamic linker only pick up libraries from the library path and rpath and not look at the ld.so.cache that ldconfig generates. An example of such a use case is the glibc testsuite where the dynamic linker must not be influenced by any external paths or caches. This change adds a new option --inhibit-ldcache that when used, tells the dynamic linker to not use ld.so.cache even if it is available.
2012-02-09Replace FSF snail mail address with URLs.Paul Eggert1-3/+2
2011-10-07elf/dl-load.c: Avoid warningMarek Polacek1-1/+1
2011-09-08Fix crash during error handlingAndreas Schwab1-1/+1
2011-09-08Use O_CLOEXEC when loading objects in ld.soUlrich Drepper1-1/+1
2011-09-07Fix memory leak in case of failed dlopenUlrich Drepper1-0/+2
2011-08-12Better check for last patchUlrich Drepper1-1/+1
Don't indicate that dependencies of dynamically loaded objects are also dynamically loaded.
2011-08-12Better debug information from ld.soUlrich Drepper1-3/+5
Differentiate between loading as a dependency and loading on request.
2011-05-11Fix up testing for valid $ORIGIN useUlrich Drepper1-16/+32