about summary refs log tree commit diff
diff options
context:
space:
mode:
authorAndreas Schwab <schwab@redhat.com>2011-02-20 07:24:56 -0500
committerCarlos O'Donell <carlos@codesourcery.com>2011-02-22 11:15:56 -0500
commit996cf2ef07277805f119c8b47be92334c907ce8f (patch)
tree03f1aa7e7533f0490e8215e27da7070723a82c87
parentfbd64d7ff21658ab754db8faa796f5ce5d388e7c (diff)
downloadglibc-996cf2ef07277805f119c8b47be92334c907ce8f.tar.gz
glibc-996cf2ef07277805f119c8b47be92334c907ce8f.tar.xz
glibc-996cf2ef07277805f119c8b47be92334c907ce8f.zip
Move setting variable in relro data earlier in ld.so.
(cherry picked from commit e23fe25b33324a9ea992276c1a4f04127bf9ba4b)
-rw-r--r--ChangeLog8
-rw-r--r--NEWS2
-rw-r--r--elf/rtld.c11
3 files changed, 16 insertions, 5 deletions
diff --git a/ChangeLog b/ChangeLog
index 8c62cb0afa..31c7554b20 100644
--- 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 da301ec8c8..86daa7fc58 100644
--- 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
 
diff --git a/elf/rtld.c b/elf/rtld.c
index 851038089c..174954bf3b 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -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)
     {