]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
Move setting variable in relro data earlier in ld.so.
authorAndreas Schwab <schwab@redhat.com>
Sun, 20 Feb 2011 12:24:56 +0000 (07:24 -0500)
committerCarlos O'Donell <carlos@codesourcery.com>
Tue, 22 Feb 2011 16:15:56 +0000 (11:15 -0500)
(cherry picked from commit e23fe25b33324a9ea992276c1a4f04127bf9ba4b)

ChangeLog
NEWS
elf/rtld.c

index 8c62cb0afafa7ad9796f2058944a3f0a9a7a28df..31c7554b200ac164ed47c96a3c1639f80a65dbc7 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2010-09-28  Andreas Schwab  <schwab@redhat.com>
+           Ulrich Drepper  <drepper@gmail.com>
+
+       [BZ #12489]
+       * elf/rtld.c (dl_main): Move setting of GLRO(dl_init_all_dirs)
+       before performing relro protection.  At old place add assertion
+       to make sure nothing changed.
+
 2011-02-16  Ryan S. Arnold  <rsa@us.ibm.com>
 
        * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h:
diff --git a/NEWS b/NEWS
index da301ec8c81a22b9f67d51fcc9149575b372fba2..86daa7fc583d02bed2bbe4dc0ae7fcca839769ae 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -13,7 +13,7 @@ Version 2.13
   11655, 11701, 11840, 11856, 11883, 11903, 11904, 11968, 11979, 12005,
   12037, 12067, 12077, 12078, 12092, 12093, 12107, 12108, 12113, 12140,
   12159, 12167, 12191, 12194, 12201, 12204, 12205, 12207, 12348, 12378,
-  12394, 12397
+  12394, 12397, 12489
 
 * New Linux interfaces: prlimit, prlimit64, fanotify_init, fanotify_mark
 
index 851038089c6b527f83b532b3deac53a6f7099b5a..174954bf3bae5f97f55d4c1b49f70415f879d8ab 100644 (file)
@@ -1,5 +1,5 @@
 /* Run time dynamic linker.
-   Copyright (C) 1995-2006, 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
+   Copyright (C) 1995-2010, 2011 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    The GNU C Library is free software; you can redistribute it and/or
@@ -2179,6 +2179,10 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
      we need it in the memory handling later.  */
   GLRO(dl_initial_searchlist) = *GL(dl_ns)[LM_ID_BASE]._ns_main_searchlist;
 
+  /* Remember the last search directory added at startup, now that
+     malloc will no longer be the one from dl-minimal.c.  */
+  GLRO(dl_init_all_dirs) = GL(dl_all_dirs);
+
   if (prelinked)
     {
       if (main_map->l_info [ADDRIDX (DT_GNU_CONFLICT)] != NULL)
@@ -2298,9 +2302,8 @@ ERROR: ld.so: object '%s' cannot be loaded as audit interface: %s; ignored.\n",
                          lossage);
     }
 
-  /* Remember the last search directory added at startup, now that
-     malloc will no longer be the one from dl-minimal.c.  */
-  GLRO(dl_init_all_dirs) = GL(dl_all_dirs);
+  /* Make sure no new search directories have been added.  */
+  assert (GLRO(dl_init_all_dirs) == GL(dl_all_dirs));
 
   if (! prelinked && rtld_multiple_ref)
     {