]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
elf: Ignore LD_LIBRARY_PATH and debug env var for setuid for static
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Mon, 6 Nov 2023 20:25:49 +0000 (17:25 -0300)
committerFlorian Weimer <fweimer@redhat.com>
Tue, 20 May 2025 19:08:16 +0000 (21:08 +0200)
It mimics the ld.so behavior.

Checked on x86_64-linux-gnu.
Reviewed-by: Siddhesh Poyarekar <siddhesh@sourceware.org>
(cherry picked from commit 5451fa962cd0a90a0e2ec1d8910a559ace02bba0)

Changes:

git/elf/dl-support.c
  (missing commit 55f41ef8de4a4d0c5762d78659e11202d3c765d4
   ("elf: Remove LD_PROFILE for static binaries"),
   missing removal of tunables support)

elf/dl-support.c

index 09079c124d4228916a70ba3499227a71db52438b..1963f8a28a9acefbbb98a9f41cf15252f87cb245 100644 (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,6 +279,27 @@ _dl_non_dynamic_init (void)
   /* With vDSO setup we can initialize the function pointers.  */
   setup_vdso_pointers ();
 
+  if (__libc_enable_secure)
+    {
+      static const char unsecure_envvars[] =
+       UNSECURE_ENVVARS
+       ;
+      const char *cp = unsecure_envvars;
+
+      while (cp < unsecure_envvars + sizeof (unsecure_envvars))
+       {
+         __unsetenv (cp);
+         cp = strchr (cp, '\0') + 1;
+       }
+
+#if !HAVE_TUNABLES
+      if (__access ("/etc/suid-debug", F_OK) != 0)
+       __unsetenv ("MALLOC_CHECK_");
+#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",
@@ -302,28 +321,6 @@ _dl_non_dynamic_init (void)
     _dl_profile_output
       = &"/var/tmp\0/var/profile"[__libc_enable_secure ? 9 : 0];
 
-  if (__libc_enable_secure)
-    {
-      static const char unsecure_envvars[] =
-       UNSECURE_ENVVARS
-#ifdef EXTRA_UNSECURE_ENVVARS
-       EXTRA_UNSECURE_ENVVARS
-#endif
-       ;
-      const char *cp = unsecure_envvars;
-
-      while (cp < unsecure_envvars + sizeof (unsecure_envvars))
-       {
-         __unsetenv (cp);
-         cp = (const char *) __rawmemchr (cp, '\0') + 1;
-       }
-
-#if !HAVE_TUNABLES
-      if (__access ("/etc/suid-debug", F_OK) != 0)
-       __unsetenv ("MALLOC_CHECK_");
-#endif
-    }
-
 #ifdef DL_PLATFORM_INIT
   DL_PLATFORM_INIT;
 #endif