elf: Ignore LD_LIBRARY_PATH and debug env var for setuid for static

It mimics the ld.so behavior.

Checked on x86_64-linux-gnu.
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>

(cherry picked from commit 5451fa962c)

Changes:
	Keep EXTRA_UNSECURE_ENVVARS support.
	Use __rawmemchr instead of strchr.
	Keep LD_PROFILE_OUTPUT support.
	Make tunables support optional via HAVE_TUNABLES.
This commit is contained in:
Adhemerval Zanella 2023-11-06 17:25:49 -03:00 committed by Florian Weimer
parent c7ff2bc297
commit 621c65ccf1
1 changed files with 23 additions and 23 deletions

View File

@ -272,8 +272,6 @@ _dl_non_dynamic_init (void)
_dl_main_map.l_phdr = GL(dl_phdr);
_dl_main_map.l_phnum = GL(dl_phnum);
_dl_verbose = *(getenv ("LD_WARN") ?: "") == '\0' ? 0 : 1;
/* Set up the data structures for the system-supplied DSO early,
so they can influence _dl_init_paths. */
setup_vdso (NULL, NULL);
@ -281,27 +279,6 @@ _dl_non_dynamic_init (void)
/* With vDSO setup we can initialize the function pointers. */
setup_vdso_pointers ();
/* Initialize the data structures for the search paths for shared
objects. */
_dl_init_paths (getenv ("LD_LIBRARY_PATH"), "LD_LIBRARY_PATH",
/* No glibc-hwcaps selection support in statically
linked binaries. */
NULL, NULL);
/* Remember the last search directory added at startup. */
_dl_init_all_dirs = GL(dl_all_dirs);
_dl_lazy = *(getenv ("LD_BIND_NOW") ?: "") == '\0';
_dl_bind_not = *(getenv ("LD_BIND_NOT") ?: "") != '\0';
_dl_dynamic_weak = *(getenv ("LD_DYNAMIC_WEAK") ?: "") == '\0';
_dl_profile_output = getenv ("LD_PROFILE_OUTPUT");
if (_dl_profile_output == NULL || _dl_profile_output[0] == '\0')
_dl_profile_output
= &"/var/tmp\0/var/profile"[__libc_enable_secure ? 9 : 0];
if (__libc_enable_secure)
{
static const char unsecure_envvars[] =
@ -324,6 +301,29 @@ _dl_non_dynamic_init (void)
#endif
}
_dl_verbose = *(getenv ("LD_WARN") ?: "") == '\0' ? 0 : 1;
/* Initialize the data structures for the search paths for shared
objects. */
_dl_init_paths (getenv ("LD_LIBRARY_PATH"), "LD_LIBRARY_PATH",
/* No glibc-hwcaps selection support in statically
linked binaries. */
NULL, NULL);
/* Remember the last search directory added at startup. */
_dl_init_all_dirs = GL(dl_all_dirs);
_dl_lazy = *(getenv ("LD_BIND_NOW") ?: "") == '\0';
_dl_bind_not = *(getenv ("LD_BIND_NOT") ?: "") != '\0';
_dl_dynamic_weak = *(getenv ("LD_DYNAMIC_WEAK") ?: "") == '\0';
_dl_profile_output = getenv ("LD_PROFILE_OUTPUT");
if (_dl_profile_output == NULL || _dl_profile_output[0] == '\0')
_dl_profile_output
= &"/var/tmp\0/var/profile"[__libc_enable_secure ? 9 : 0];
#ifdef DL_PLATFORM_INIT
DL_PLATFORM_INIT;
#endif