[v2,3/3] elf: Remove LD_USE_LOAD_BIAS
Checks
Context |
Check |
Description |
dj/TryBot-32bit |
success
|
Build for i686
|
Commit Message
It is solely for prelink with PIE exectuables [1].
[1] https://sourceware.org/legacy-ml/libc-hacker/2003-11/msg00127.html
---
NEWS | 3 +++
elf/dl-map-segments.h | 3 +--
elf/dl-support.c | 1 -
elf/rtld.c | 13 -------------
sysdeps/generic/ldsodefs.h | 5 -----
sysdeps/generic/unsecvars.h | 1 -
6 files changed, 4 insertions(+), 22 deletions(-)
Comments
On 04/02/2022 00:27, Adhemerval Zanella via Libc-alpha wrote:
> It is solely for prelink with PIE exectuables [1].
>
> [1] https://sourceware.org/legacy-ml/libc-hacker/2003-11/msg00127.html
LGTM.
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
> ---
> NEWS | 3 +++
> elf/dl-map-segments.h | 3 +--
> elf/dl-support.c | 1 -
> elf/rtld.c | 13 -------------
> sysdeps/generic/ldsodefs.h | 5 -----
> sysdeps/generic/unsecvars.h | 1 -
> 6 files changed, 4 insertions(+), 22 deletions(-)
>
> diff --git a/NEWS b/NEWS
> index f9c4589037..b1540ba583 100644
> --- a/NEWS
> +++ b/NEWS
> @@ -196,6 +196,9 @@ Deprecated and removed features, and other changes affecting compatibility:
> functionality to obtain the program mapping address can be achieved by
> using LD_TRACE_LOADED_OBJECTS to value of 2.
>
> +* The LD_USE_LOAD_BIAS has been removed. The variable was mainly used to
> + support prelink PIE binaries.
> +
> Changes to build and runtime requirements:
>
> * The audit module interface version LAV_CURRENT is increased to enable
> diff --git a/elf/dl-map-segments.h b/elf/dl-map-segments.h
> index 172692b120..b3513e7909 100644
> --- a/elf/dl-map-segments.h
> +++ b/elf/dl-map-segments.h
> @@ -94,8 +94,7 @@ _dl_map_segments (struct link_map *l, int fd,
> prefer to map such objects at; but this is only a preference,
> the OS can do whatever it likes. */
> ElfW(Addr) mappref
> - = (ELF_PREFERRED_ADDRESS (loader, maplength,
> - c->mapstart & GLRO(dl_use_load_bias))
> + = (ELF_PREFERRED_ADDRESS (loader, maplength, c->mapstart)
> - MAP_BASE_ADDR (l));
>
> /* Remember which part of the address space this object uses. */
> diff --git a/elf/dl-support.c b/elf/dl-support.c
> index fb64765537..6d2c4baf81 100644
> --- a/elf/dl-support.c
> +++ b/elf/dl-support.c
> @@ -54,7 +54,6 @@ size_t _dl_platformlen;
>
> int _dl_debug_mask;
> int _dl_lazy;
> -ElfW(Addr) _dl_use_load_bias = -2;
> int _dl_dynamic_weak;
>
> /* If nonzero print warnings about problematic situations. */
> diff --git a/elf/rtld.c b/elf/rtld.c
> index aa18256d86..19e328f89e 100644
> --- a/elf/rtld.c
> +++ b/elf/rtld.c
> @@ -365,7 +365,6 @@ struct rtld_global_ro _rtld_global_ro attribute_relro =
> ._dl_sysinfo = DL_SYSINFO_DEFAULT,
> #endif
> ._dl_debug_fd = STDERR_FILENO,
> - ._dl_use_load_bias = -2,
> ._dl_correct_cache_id = _DL_CACHE_DEFAULT_ID,
> #if !HAVE_TUNABLES
> ._dl_hwcap_mask = HWCAP_IMPORTANT,
> @@ -1742,12 +1741,6 @@ dl_main (const ElfW(Phdr) *phdr,
> ++GL(dl_ns)[LM_ID_BASE]._ns_nloaded;
> ++GL(dl_load_adds);
>
> - /* If LD_USE_LOAD_BIAS env variable has not been seen, default
> - to not using bias for non-prelinked PIEs and libraries
> - and using it for executables or prelinked PIEs or libraries. */
> - if (GLRO(dl_use_load_bias) == (ElfW(Addr)) -2)
> - GLRO(dl_use_load_bias) = main_map->l_addr == 0 ? -1 : 0;
> -
> /* Starting from binutils-2.23, the linker will define the magic symbol
> __ehdr_start to point to our own ELF header if it is visible in a
> segment that also includes the phdrs. If that's not available, we use
> @@ -2657,12 +2650,6 @@ process_envvars (struct dl_main_state *state)
> #ifdef EXTRA_LD_ENVVARS_13
> EXTRA_LD_ENVVARS_13
> #endif
> - if (!__libc_enable_secure
> - && memcmp (envline, "USE_LOAD_BIAS", 13) == 0)
> - {
> - GLRO(dl_use_load_bias) = envline[14] == '1' ? -1 : 0;
> - break;
> - }
> break;
>
> case 14:
> diff --git a/sysdeps/generic/ldsodefs.h b/sysdeps/generic/ldsodefs.h
> index d1c6cd902b..9878e7e87e 100644
> --- a/sysdeps/generic/ldsodefs.h
> +++ b/sysdeps/generic/ldsodefs.h
> @@ -628,11 +628,6 @@ struct rtld_global_ro
> /* Location of the binary. */
> EXTERN const char *_dl_origin_path;
>
> - /* -1 if the dynamic linker should honor library load bias,
> - 0 if not, -2 use the default (honor biases for normal
> - binaries, don't honor for PIEs). */
> - EXTERN ElfW(Addr) _dl_use_load_bias;
> -
> /* Size of the static TLS block. */
> EXTERN size_t _dl_tls_static_size;
>
> diff --git a/sysdeps/generic/unsecvars.h b/sysdeps/generic/unsecvars.h
> index 5ea8a4a259..b50331b50f 100644
> --- a/sysdeps/generic/unsecvars.h
> +++ b/sysdeps/generic/unsecvars.h
> @@ -22,7 +22,6 @@
> "LD_PRELOAD\0" \
> "LD_PROFILE\0" \
> "LD_SHOW_AUXV\0" \
> - "LD_USE_LOAD_BIAS\0" \
> "LOCALDOMAIN\0" \
> "LOCPATH\0" \
> "MALLOC_TRACE\0" \
@@ -196,6 +196,9 @@ Deprecated and removed features, and other changes affecting compatibility:
functionality to obtain the program mapping address can be achieved by
using LD_TRACE_LOADED_OBJECTS to value of 2.
+* The LD_USE_LOAD_BIAS has been removed. The variable was mainly used to
+ support prelink PIE binaries.
+
Changes to build and runtime requirements:
* The audit module interface version LAV_CURRENT is increased to enable
@@ -94,8 +94,7 @@ _dl_map_segments (struct link_map *l, int fd,
prefer to map such objects at; but this is only a preference,
the OS can do whatever it likes. */
ElfW(Addr) mappref
- = (ELF_PREFERRED_ADDRESS (loader, maplength,
- c->mapstart & GLRO(dl_use_load_bias))
+ = (ELF_PREFERRED_ADDRESS (loader, maplength, c->mapstart)
- MAP_BASE_ADDR (l));
/* Remember which part of the address space this object uses. */
@@ -54,7 +54,6 @@ size_t _dl_platformlen;
int _dl_debug_mask;
int _dl_lazy;
-ElfW(Addr) _dl_use_load_bias = -2;
int _dl_dynamic_weak;
/* If nonzero print warnings about problematic situations. */
@@ -365,7 +365,6 @@ struct rtld_global_ro _rtld_global_ro attribute_relro =
._dl_sysinfo = DL_SYSINFO_DEFAULT,
#endif
._dl_debug_fd = STDERR_FILENO,
- ._dl_use_load_bias = -2,
._dl_correct_cache_id = _DL_CACHE_DEFAULT_ID,
#if !HAVE_TUNABLES
._dl_hwcap_mask = HWCAP_IMPORTANT,
@@ -1742,12 +1741,6 @@ dl_main (const ElfW(Phdr) *phdr,
++GL(dl_ns)[LM_ID_BASE]._ns_nloaded;
++GL(dl_load_adds);
- /* If LD_USE_LOAD_BIAS env variable has not been seen, default
- to not using bias for non-prelinked PIEs and libraries
- and using it for executables or prelinked PIEs or libraries. */
- if (GLRO(dl_use_load_bias) == (ElfW(Addr)) -2)
- GLRO(dl_use_load_bias) = main_map->l_addr == 0 ? -1 : 0;
-
/* Starting from binutils-2.23, the linker will define the magic symbol
__ehdr_start to point to our own ELF header if it is visible in a
segment that also includes the phdrs. If that's not available, we use
@@ -2657,12 +2650,6 @@ process_envvars (struct dl_main_state *state)
#ifdef EXTRA_LD_ENVVARS_13
EXTRA_LD_ENVVARS_13
#endif
- if (!__libc_enable_secure
- && memcmp (envline, "USE_LOAD_BIAS", 13) == 0)
- {
- GLRO(dl_use_load_bias) = envline[14] == '1' ? -1 : 0;
- break;
- }
break;
case 14:
@@ -628,11 +628,6 @@ struct rtld_global_ro
/* Location of the binary. */
EXTERN const char *_dl_origin_path;
- /* -1 if the dynamic linker should honor library load bias,
- 0 if not, -2 use the default (honor biases for normal
- binaries, don't honor for PIEs). */
- EXTERN ElfW(Addr) _dl_use_load_bias;
-
/* Size of the static TLS block. */
EXTERN size_t _dl_tls_static_size;
@@ -22,7 +22,6 @@
"LD_PRELOAD\0" \
"LD_PROFILE\0" \
"LD_SHOW_AUXV\0" \
- "LD_USE_LOAD_BIAS\0" \
"LOCALDOMAIN\0" \
"LOCPATH\0" \
"MALLOC_TRACE\0" \