Commit Graph

3268 Commits

Author SHA1 Message Date
joerg ea47af4c11 Don't play #define games with extern, just have a separate list to avoid commons 2020-04-23 00:03:40 +00:00
joerg dca0c0f499 Mark _rtld_invalid_paths static as ldd can end up with two copies 2020-04-22 23:54:32 +00:00
joerg 25a494ecc4 Rename __atomic_fork to __locked_fork and give it &errno as argument.
rtld and libc use different storage, so the initial version would
incorrectly report the failure reason for fork().

There is still a small race condition inside ld.elf_so as it doesn't use
thread-safe errno internally, but that's a more contained internal
issue.
2020-04-19 01:06:15 +00:00
sevan 95b8f8498c document history 2020-04-18 22:03:51 +00:00
joerg 11954c74b6 Introduce intermediate locking for fork, so that the dynamic linker is
in a consistent state. This most importantly avoids races between dlopen
and friends and fork, potentially resulting in dead locks in the child
when it itself tries to acquire locks.
2020-04-16 14:39:58 +00:00
thorpej da570a6238 PT_GNU_RELRO segments are arranged such that their vaddr + memsz ends
on a linker common page size boundary.  However, if the common page size
used by the linker is less than the VM page size being used by the kernel,
this can end up in the middle of a VM page and when the region is write-
protected, this can cause objects in neighboring .data to get incorrectly
write-protected, resulting in a crash.

Avoid this situation by calculating the end of the RELRO region not by
rounding memsz up to the VM page size, but rather by adding vaddr + memsz
and then truncating to the VM page size.

Fixes PR toolchain/55043.

XXX pullup-9
2020-03-04 01:21:17 +00:00
kamil 0b0e2ac42c Add extra cast to suppress incompatible-pointer-types GCC warning 2020-02-29 18:53:55 +00:00
kamil 33f6117993 Fix vax and mips build 2020-02-29 18:45:20 +00:00
kamil e8e477017a Implement DT_GNU_HASH
DT_GNU_HASH serves the same purpose as DT_HASH, however it is a distinct
and faster apprach implemented and designed in the GNU toolchain in 2006.

DT_GNU_HASH is preferred whenever available.

Original GNU benchmarks claim 50% faster dynamic linking time.
https://www.sourceware.org/ml/binutils/2006-06/msg00418.html

Code based on FreeBSD and OpenBSD, both were based on DragonFlyBSD.
2020-02-29 04:24:33 +00:00
kamil 4e9bea3d5d Implement and integrate GNU Hashing function
Define Elf_Hash struct that contains ELF/SYSV and GNU hash checksum.
Implement _rtld_gnu_hash() for DT_GNU_HASH.
Adapt existing code to compute all Elf_Hash types, instead of only
the ELF/SYSV one.
Rename _rtld_elf_hash() to _rtld_sysv_hash() to match the GNU toolchain
terminology.

_rtld_gnu_hash() uses Dan Bernstein's string hash function posted eons ago
on comp.lang.c.
2020-02-29 04:23:05 +00:00
kamil e5a904478f Separate matched symbol functionality out of _rtld_symlook_obj()
Simplifies the code and it will allow to use the matched symbol
functionality by other users.
2020-02-29 04:21:42 +00:00
riastradh fcfd803846 uugetty is no more 2020-02-26 15:44:57 +00:00
kamil ac23308f24 Specify NOLIBCSANITIZER for the ELF loader
The sanitizer does not work reliably before finishing initialization of
ld.elf_so. There is also a number of false positives that are not real
problems here.
2020-02-09 09:11:59 +00:00
uwe 3582b90734 Use existing lo() and hi() macros. Same object code is generated. 2019-12-08 23:49:16 +00:00
uwe f3a8613fae Resolve ADDR16_LO, ADDR16_HI, and ADDR16_HA relocs.
Recent GNU ld does not resolve them statically if the reloc is in a
writable section and the symbol is not already referenced from text.
2019-12-08 22:57:51 +00:00
uwe 1cea4da77d Fix typo in a comment. 2019-12-08 22:41:42 +00:00
uwe 9332bf7c88 _rtld_relro - fix debug printf format for a size_t argument 2019-12-08 22:35:27 +00:00
mrg e563647e37 remove some XXX comments. one isn't relevant, and the other two
have been incorrect for a long while now.
2019-12-06 05:53:20 +00:00
joerg 336e4f812b Use alignof and not size_t for platforms with non-natural base
alignments.
2019-11-05 22:22:42 +00:00
joerg a0e0f8b685 PR 54093: Align static TLS area to max_align_t. 2019-11-04 12:45:10 +00:00
christos ba0758a3b7 simplify pointer gymnastics that sprained gcc-8 2019-11-03 03:15:59 +00:00
mrg 50851f2ac3 set -D_GNU_SOURCE, needed for linux systems and should be
harmless or ignored elsewhere.

from perry.
2019-10-30 07:28:13 +00:00
christos 3a70c5972e bump sizes 2019-10-15 18:29:32 +00:00
christos 384c9fdd8d use strncpy... 2019-10-15 18:29:21 +00:00
mrg 9d7a8fa9a3 use strlcpy to ensure termination.
the buffer is statically sized so that it works without an
allocator, so truncation is the desired effect here.
2019-10-13 20:18:42 +00:00
mrg de11d87641 introduce some common variables for use in GCC warning disables:
GCC_NO_FORMAT_TRUNCATION    -Wno-format-truncation (GCC 7/8)
GCC_NO_STRINGOP_TRUNCATION  -Wno-stringop-truncation (GCC 8)
GCC_NO_STRINGOP_OVERFLOW    -Wno-stringop-overflow (GCC 8)
GCC_NO_CAST_FUNCTION_TYPE   -Wno-cast-function-type (GCC 8)

use these to turn off warnings for most GCC-8 complaints.  many
of these are false positives, most of the real bugs are already
commited, or are yet to come.


we plan to introduce versions of (some?) of these that use the
"-Wno-error=" form, which still displays the warnings but does
not make it an error, and all of the above will be re-considered
as either being "fix me" (warning still displayed) or "warning
is wrong."
2019-10-13 07:28:04 +00:00
christos 7519806b07 use __func__ (c99, c++11) instead of __FUNCTION__ 2019-10-04 01:57:53 +00:00
tnn e91fbc780d improve error message 2019-10-03 10:34:30 +00:00
kamil 3b610a6e8d Return the ELF loader dl_phdr_info information for dl_iterate_phdr(3)
Sync the behavior of dl_iterate_phdr(3) with Linux/FreeBSD/OpenBSD.
2019-09-15 13:40:46 +00:00
wiz 2ddc414a15 New sentence, new line. Punctuation improvements. 2019-08-31 07:49:48 +00:00
brad a1475d6d11 Add support for passing the raw device name separate from the
filesystem.  This is useful in the case where the cleaner is compiled
into code, such as rump_lfs and the ATF tests.  This helps to fix
bin/54488
2019-08-30 23:37:23 +00:00
rmind 0dd7abe473 libnpf fix: link the library itself to libnv; libnpf users should not be
expected to assume this dependency.
2019-08-24 13:20:52 +00:00
brad ca50e52c93 Use getdiskrawname to find the device name
Reviewed by Christos
2019-08-22 20:28:08 +00:00
kamil d9a1e5d37f telnetd: Stop defining the same variables concurrently in bss and data
auth_level and require_secure_login were defined in two places:

 - global.c that picked it from headers and removed 'extern'
 - telnetd.c that initialized it to 0

line was defined twice: in global.c and sys_term.c with a non-zero value.
Remove the definition and initialization from sys_term.c and initialize
the variable early in main().

Detected during the build of telned with Address Sanitizer (MKSANITIZER).

Reviewed by <mrg>
2019-08-15 01:15:21 +00:00
uwe 8fd03c43d4 Tweak markup some more. 2019-07-15 01:26:15 +00:00
uwe c42a8ccb39 Improve (hopefully) mark up of the capabilities tables. 2019-07-12 03:32:41 +00:00
uwe 776605b5ed Use proper markup instead of .Em to refer to capabilities, structure
memebers, etc in the text (but not in the tables yet, as those require
more rework).
2019-07-12 01:53:45 +00:00
wiz 25c730350a Merge lines. Fixes display problem noted in PR 54361 by he@ 2019-07-11 09:48:22 +00:00
maya 3bb853ed54 r_symndx is no longer declared, use symnum and initialize it before use.
Completes the changes in the commit:
"Replace COMBREL with just-in-time check in _rtld_relocate_nonplt_objects."
http://mail-index.netbsd.org/source-changes/2017/06/19/msg085496.html
2019-04-15 19:13:03 +00:00
maya 53dcb847d9 $ORIGIN support is now enabled.
Thanks martin for the heads up.
2019-04-15 10:17:01 +00:00
abhinav 55eec9d71a Typo: s/a indirection/an indirection/ 2019-04-15 06:42:06 +00:00
wiz a30bc70869 Use more Dv. 2019-04-14 22:09:50 +00:00
maya 9a04775cfa Note that we now search DT_RUNPATH paths as well. 2019-04-14 20:27:02 +00:00
christos fb007af046 undo previous unlock/relock; it is not needed now that we added the tls model
declaration to all externs in jemalloc (suggested by joerg@)
2019-04-14 19:21:37 +00:00
christos 15018ca013 Fix c++ exceptions on arm; jemalloc calls _rtld_tls_get_addr from inside
dl_iterate_phdr, so we need to unlock and relock.
2019-04-13 03:15:25 +00:00
rin e66054b66e Do not compile __tls_get_addr() into ldd(1), which fixes ldd(1) crashing
on arm after switching to new jemalloc.

jemalloc invokes __tls_get_addr() under some condition. If anything other
than ld.elf_so nor libc exports it, inconsistency arises as a result.
2019-04-13 00:23:32 +00:00
christos 39fadeea40 Disable optimization for rtld.c on the vax with gcc-7. 2019-04-03 21:37:58 +00:00
martin 9e275c0f36 Account for cgihandler being set when counting the number of CGI environment
headers we are about to set. Avoids an assertion failure (and overruninng
the array) later.
2019-03-29 14:46:44 +00:00
mrg 58a223ca24 add $NetBSD$ 2019-03-27 04:50:30 +00:00
mrg 8b21018e17 on m68010 set BOZO_WRSZ to 16k and BOZO_WRSZ to 64k. 2019-03-08 03:12:28 +00:00