#
fda0403e |
| 06-Dec-2024 |
John Baldwin <jhb@FreeBSD.org> |
rtld: Support multiple PT_GNU_RELRO program headers
Iterate over all the program headers in obj_remap_relro and remove the relro fields from Obj_Entry.
Skip the call to obj_enforce_relro() in reloc
rtld: Support multiple PT_GNU_RELRO program headers
Iterate over all the program headers in obj_remap_relro and remove the relro fields from Obj_Entry.
Skip the call to obj_enforce_relro() in relocate_object() for the rtld object as well as the main program object. obj_enforce_relro() is called later when it safe to reference globals such as page_size.
Reviewed by: kib Obtained from: CheriBSD Sponsored by: AFRL, DARPA Differential Revision: https://reviews.freebsd.org/D47884
show more ...
|
Revision tags: release/14.2.0, release/13.4.0 |
|
#
33658afd |
| 22-Aug-2024 |
Jessica Clarke <jrtc27@FreeBSD.org> |
rtld-elf: Pass parsed aux_info to ifunc_init
Currently we pass the raw pointer to the on-stack auxargs. This can legitimately have fewer than AT_COUNT entries, so the use of __min_size(AT_COUNT), i.
rtld-elf: Pass parsed aux_info to ifunc_init
Currently we pass the raw pointer to the on-stack auxargs. This can legitimately have fewer than AT_COUNT entries, so the use of __min_size(AT_COUNT), i.e. static AT_COUNT, is inaccurate, and also needlessly forces the callee to iterate over the elements to find the entry for a given type. Instead we can just pass aux_info like we use for everything else.
Note that the argument has been left unused by every callee since its introduction in 4352999e0e6c ("Pass CPUID[1] %edx (cpu_feature), %ecx (cpu_feature2) and CPUID[7].%ebx (cpu_stdext_feature), %ecx (cpu_stdext_feature2) to the ifunc resolvers on x86.")
Reviewed by: kib MFC after: 1 month Differential Revision: https://reviews.freebsd.org/D46276
show more ...
|
#
860c4d94 |
| 17-Jul-2024 |
Konstantin Belousov <kib@FreeBSD.org> |
rtld: add LD_NO_DL_ITERATE_PHDR_AFTER_FORK env var
which makes threaded fork ignore the phdr rtld lock, in particular allowing the dl_iterate_phdr() to block in callback. The cost is that the image
rtld: add LD_NO_DL_ITERATE_PHDR_AFTER_FORK env var
which makes threaded fork ignore the phdr rtld lock, in particular allowing the dl_iterate_phdr() to block in callback. The cost is that the image started in this mode cannot use dl_iterate_phdr() after fork.
PR: 280318 Sponsored by: The FreeBSD Foundation MFC after: 1 week
show more ...
|
#
47315d6d |
| 17-Jul-2024 |
Konstantin Belousov <kib@FreeBSD.org> |
rtld: make ld_get_env_var() usable for all rtld source files
Sponsored by: The FreeBSD Foundation MFC after: 1 week
|
Revision tags: release/14.1.0 |
|
#
1cd90a2c |
| 13-May-2024 |
Andrew Turner <andrew@FreeBSD.org> |
rtld: Move powerpc specific code to powerpc files
There are two variables set by dynamic tags in the powerpc runtime linker. Now we have a way to split out architecture-specific dynamic tags use it
rtld: Move powerpc specific code to powerpc files
There are two variables set by dynamic tags in the powerpc runtime linker. Now we have a way to split out architecture-specific dynamic tags use it to handle these.
Reviewed by: kib, jhibbits Obtained from: jhibbits (earlier version) Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D45182
show more ...
|
#
06db20ff |
| 07-May-2024 |
Andrew Turner <andrew@FreeBSD.org> |
rtld: Add MD_OBJ_ENTRY to extend Struct_Obj_Entry
Add a macro the architectures can use to add per-arch fields to Struct_Obj_Entry.
Reviewed by: kib Sponsored by: Arm Ltd Differential Revision: htt
rtld: Add MD_OBJ_ENTRY to extend Struct_Obj_Entry
Add a macro the architectures can use to add per-arch fields to Struct_Obj_Entry.
Reviewed by: kib Sponsored by: Arm Ltd Differential Revision: https://reviews.freebsd.org/D45116
show more ...
|
Revision tags: release/13.3.0 |
|
#
968a1897 |
| 13-Feb-2024 |
Konstantin Belousov <kib@FreeBSD.org> |
rtld: ignore load_filtees() calls if we already loading filtees for the obj
in addition to avoiding it for already loaded filtees. Issue is that during load, rtld needs to resolve some special ABI s
rtld: ignore load_filtees() calls if we already loading filtees for the obj
in addition to avoiding it for already loaded filtees. Issue is that during load, rtld needs to resolve some special ABI symbols, like executable stack fixer and static TLS initializer, which might trigger recursion.
Example is libthr which is filter for libsys, and which exports __pthread_distribute_static_tls.
Tested by: kevans, krion Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D43858
show more ...
|
#
9daf6cd0 |
| 29-Nov-2023 |
Konstantin Belousov <kib@FreeBSD.org> |
RTLD_DEEPBIND: make lookup not just symbolic, but walk all refobj' DAGs
before starting the walk over the global list. Effectively we visit needed objects first as well, instead of just the object
RTLD_DEEPBIND: make lookup not just symbolic, but walk all refobj' DAGs
before starting the walk over the global list. Effectively we visit needed objects first as well, instead of just the object itself. This seems to better match the semantic offered by the glibc flag.
Reported by: kevans PR: 275393 Reviewed by: kevans Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D42841
show more ...
|
Revision tags: release/14.0.0 |
|
#
95335dd3 |
| 29-Oct-2023 |
Stephen J. Kiernan <stevek@FreeBSD.org> |
rtld: introduce STATIC_TLS_EXTRA
The new STATIC_TLS_EXTRA variable provides a means for applications to increases the size of the extra static TLS space allocated by rtld beyond the default of '128'
rtld: introduce STATIC_TLS_EXTRA
The new STATIC_TLS_EXTRA variable provides a means for applications to increases the size of the extra static TLS space allocated by rtld beyond the default of '128'. This extra static TLS space is used for objects loaded with dlopen.
The value specified in the variable must be no less than the default value and no greater than the maximum allowed value for size_t type.
If an invalid value is specified, rtld will ignore it and just use the default value.
The rtld(1) man page is updated to document this new option.
Obtained from: Juniper Networks, Inc. Differential Revision: https://reviews.freebsd.org/D42025
show more ...
|
#
feaae6ba |
| 30-Jul-2023 |
Konstantin Belousov <kib@FreeBSD.org> |
rtld: switch from malloc_aligned() to __crt_aligned_alloc()
Use regular free(), since it works now.
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision:
rtld: switch from malloc_aligned() to __crt_aligned_alloc()
Use regular free(), since it works now.
Reviewed by: markj Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D41150
show more ...
|
#
b3e76948 |
| 16-Aug-2023 |
Warner Losh <imp@FreeBSD.org> |
Remove $FreeBSD$: two-line .h pattern
Remove /^\s*\*\n \*\s+\$FreeBSD\$$\n/
|
#
cf6dbdd1 |
| 22-Jul-2023 |
Konstantin Belousov <kib@FreeBSD.org> |
rtld: remove dup __crt_malloc prototypes
Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D41150
|
#
91880e07 |
| 05-Jun-2023 |
Konstantin Belousov <kib@FreeBSD.org> |
rtld: do not allow both dynamic DTV index and static TLS offset
If we are allocating static offset for an object with dynamic index, return failure. In the opposite case, if dynamic index is reques
rtld: do not allow both dynamic DTV index and static TLS offset
If we are allocating static offset for an object with dynamic index, return failure. In the opposite case, if dynamic index is requested for statically allocated TLS area, directly use the offset instead of setting the index.
Taken from NetBSD Joerg Sonnenberger change for src/libexec/ld.elf_so/tls.c rev. 1.18.
Sponsored by: The FreeBSD Foundation MFC after: 1 week
show more ...
|
#
283a4f40 |
| 05-Jun-2023 |
Konstantin Belousov <kib@FreeBSD.org> |
rtld: rename tls_done to tls_static
The meaning of the flag is that static TLS allocation was done.
Taken from NetBSD Joerg Sonnenberger change for src/libexec/ld.elf_so/tls.c rev. 1.18.
Sponsored
rtld: rename tls_done to tls_static
The meaning of the flag is that static TLS allocation was done.
Taken from NetBSD Joerg Sonnenberger change for src/libexec/ld.elf_so/tls.c rev. 1.18.
Sponsored by: The FreeBSD Foundation MFC after: 1 week
show more ...
|
#
4d846d26 |
| 10-May-2023 |
Warner Losh <imp@FreeBSD.org> |
spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD
The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch up to that fact and revert to their recommended match of
spdx: The BSD-2-Clause-FreeBSD identifier is obsolete, drop -FreeBSD
The SPDX folks have obsoleted the BSD-2-Clause-FreeBSD identifier. Catch up to that fact and revert to their recommended match of BSD-2-Clause.
Discussed with: pfg MFC After: 3 days Sponsored by: Netflix
show more ...
|
#
29e3a065 |
| 12-Apr-2023 |
Ed Maste <emaste@FreeBSD.org> |
rtld: fix SysV hash function overflow
Quoting from https://maskray.me/blog/2023-04-12-elf-hash-function:
The System V Application Binary Interface (generic ABI) specifies the ELF object file format
rtld: fix SysV hash function overflow
Quoting from https://maskray.me/blog/2023-04-12-elf-hash-function:
The System V Application Binary Interface (generic ABI) specifies the ELF object file format. When producing an output executable or shared object needing a dynamic symbol table (.dynsym), a linker generates a .hash section with type SHT_HASH to hold a symbol hash table. A DT_HASH tag is produced to hold the address of .hash.
The function is supposed to return a value no larger than 0x0fffffff. Unfortunately, there is a bug. When unsigned long consists of more than 32 bits, the return value may be larger than UINT32_MAX. For instance, elf_hash((const unsigned char *)"\xff\x0f\x0f\x0f\x0f\x0f\x12") returns 0x100000002, which is clearly unintended, as the function should behave the same way regardless of whether long represents a 32-bit integer or a 64-bit integer.
Reviewed by: kib, Fangrui Song Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D39517
show more ...
|
Revision tags: release/13.2.0, release/12.4.0, release/13.1.0 |
|
#
e85eaa93 |
| 04-Apr-2022 |
Andrew Turner <andrew@FreeBSD.org> |
Have rtld query the page size from the kernel
To allow for a dynamic page size on arm64 have the runtime linker query the kernel for the currentl page size.
Reviewed by: kib Sponsored by: The FreeB
Have rtld query the page size from the kernel
To allow for a dynamic page size on arm64 have the runtime linker query the kernel for the currentl page size.
Reviewed by: kib Sponsored by: The FreeBSD Foundation Differential Revision: https://reviews.freebsd.org/D34765
show more ...
|
#
292cba9b |
| 06-Jan-2022 |
Konstantin Belousov <kib@FreeBSD.org> |
rtld: remove mips-specific cases from generic code
Reviewed by: imp Sponsored by: The FreeBSD Foundation Differential revision: https://reviews.freebsd.org/D33763
|
#
8bcdb144 |
| 09-Dec-2021 |
John Baldwin <jhb@FreeBSD.org> |
TLS: Use <machine/tls.h> for libc and rtld.
- Include <machine/tls.h> in MD rtld_machdep.h headers.
- Remove local definitions of TLS_* constants from rtld_machdep.h headers and libc using the va
TLS: Use <machine/tls.h> for libc and rtld.
- Include <machine/tls.h> in MD rtld_machdep.h headers.
- Remove local definitions of TLS_* constants from rtld_machdep.h headers and libc using the values from <machine/tls.h> instead.
- Use _tcb_set() instead of inlined versions in MD allocate_initial_tls() routines in rtld. The one exception is amd64 whose _tcb_set() invokes the amd64_set_fsbase ifunc. rtld cannot use ifuncs, so amd64 inlines the logic to optionally write to fsbase directly.
- Use _tcb_set() instead of _set_tp() in libc.
- Use '&_tcb_get()->tcb_dtv' instead of _get_tp() in both rtld and libc. This permits removing _get_tp.c from rtld.
- Use TLS_TCB_SIZE and TLS_TCB_ALIGN with allocate_tls() in MD allocate_initial_tls() routines in rtld.
Reviewed by: kib, jrtc27 (earlier version) Differential Revision: https://reviews.freebsd.org/D33353
show more ...
|
Revision tags: release/12.3.0 |
|
#
63fc4e82 |
| 11-Nov-2021 |
Konstantin Belousov <kib@FreeBSD.org> |
rtld: extract header validation into new helper check_elf_headers()
Reviewed by: emaste Discussed with: jrtc27 Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revi
rtld: extract header validation into new helper check_elf_headers()
Reviewed by: emaste Discussed with: jrtc27 Tested by: pho Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D32960
show more ...
|
#
a7d137fc |
| 16-Oct-2021 |
Fangrui Song <i@maskray.me> |
rtld: Support DT_RELR relative relocation format
PIE and shared objects usually have many relative relocations. In 2017/2018, a compact relative relocation format RELR was proposed on https://groups
rtld: Support DT_RELR relative relocation format
PIE and shared objects usually have many relative relocations. In 2017/2018, a compact relative relocation format RELR was proposed on https://groups.google.com/g/generic-abi/c/bX460iggiKg/m/GxjM0L-PBAAJ ("Proposal for a new section type SHT_RELR") and is a pre-standard. RELR usually takes 3% or smaller space than R_*_RELATIVE relocations. The virtual memory size of a mostly statically linked PIE is typically 5~10% smaller.
ld.lld --pack-dyn-relocs=relr emits RELR relocations. DT_RELR has been adopted by Android bionic, Linux kernel's arm64 port, Chrome OS (patched glibc).
This patch adds DT_RELR support to FreeBSD rtld-elf.
MFC after: 1 week Differential Revision: https://reviews.freebsd.org/D32524
show more ...
|
#
4d7f08c8 |
| 10-Apr-2021 |
Konstantin Belousov <kib@FreeBSD.org> |
rtld: unstaticise lockinfo and obj_from_addr()
Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D29633
|
Revision tags: release/13.0.0 |
|
#
7cb32a0d |
| 06-Apr-2021 |
Konstantin Belousov <kib@FreeBSD.org> |
rtld: avoid recursing on rtld_bind_lock for write
This fixes a regression in d36d6816151705907393889, where the call to __tls_get_address() was performed under rtld_bind_lock write-locked. Instead u
rtld: avoid recursing on rtld_bind_lock for write
This fixes a regression in d36d6816151705907393889, where the call to __tls_get_address() was performed under rtld_bind_lock write-locked. Instead use tls_get_addr_slow() directly, with locked = true.
Reported by: jkim, many others Tested by: jkim, bdragon (powerpc), mhorne (riscv) Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D29623
show more ...
|
#
b58c853e |
| 24-Dec-2020 |
Marius Strobl <marius@FreeBSD.org> |
rtld-elf(1): remove obsolete pre_init() hook
It's no longer used since 600ee699ed2805894f5972c6ac2c3d17dca7f6ce and r358358 respectively.
|
Revision tags: release/12.2.0, release/11.4.0 |
|
#
c1a81320 |
| 02-Jun-2020 |
Konstantin Belousov <kib@FreeBSD.org> |
Do not allow to load ET_DYN object with DF_1_PIE flag set.
Linkers are supposed to mark PIE binaries with DF_1_PIE, such binary cannot be correctly and usefully loaded neither by dlopen(3) nor as a
Do not allow to load ET_DYN object with DF_1_PIE flag set.
Linkers are supposed to mark PIE binaries with DF_1_PIE, such binary cannot be correctly and usefully loaded neither by dlopen(3) nor as a dependency of other object. For instance, we cannot do anything useful with COPY relocations, among other things.
Glibc already added similar restriction.
Requested and reviewed by: emaste Sponsored by: The FreeBSD Foundation MFC after: 1 week Differential revision: https://reviews.freebsd.org/D25086
show more ...
|