From: Andreas Schwab Date: Sun, 20 Feb 2011 12:24:56 +0000 (-0500) Subject: Move setting variable in relro data earlier in ld.so. X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=996cf2ef07277805f119c8b47be92334c907ce8f;p=thirdparty%2Fglibc.git Move setting variable in relro data earlier in ld.so. (cherry picked from commit e23fe25b33324a9ea992276c1a4f04127bf9ba4b) --- diff --git a/ChangeLog b/ChangeLog index 8c62cb0afaf..31c7554b200 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-09-28 Andreas Schwab + Ulrich Drepper + + [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 * sysdeps/unix/sysv/linux/powerpc/powerpc64/sysdep.h: diff --git a/NEWS b/NEWS index da301ec8c81..86daa7fc583 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 851038089c6..174954bf3ba 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) {