about summary refs log tree commit diff
diff options
context:
space:
mode:
authorPaul Pluzhnikov <ppluzhnikov@google.com>2014-03-12 15:58:39 -0700
committerPaul Pluzhnikov <ppluzhnikov@google.com>2014-03-12 15:58:39 -0700
commit798212a01311491d5e14fcda687460b75f8ca286 (patch)
tree97d78fbe6bd1a25dd6f1d181ae3a0efc90479d52
parentabe6d90cc8c1c212dab7cde4468f9ed895d6ba86 (diff)
downloadglibc-798212a01311491d5e14fcda687460b75f8ca286.tar.gz
glibc-798212a01311491d5e14fcda687460b75f8ca286.tar.xz
glibc-798212a01311491d5e14fcda687460b75f8ca286.zip
2014-03-12 Paul Pluzhnikov <ppluzhnikov@google.com>
	[BZ #16381]

	* elf/Makefile (tests): Add tst-pie2.
        (tests-pie): Add tst-pie2.
	* elf/tst-pie2.c: New file.
	* elf/dl-load.c (_dl_map_object_from_fd): Assert correct l_type
	for ET_EXEC.
	* elf/rtld.c (map_doit): Load executable as lt_executable.
	(dl_main): Likewise.
-rw-r--r--ChangeLog12
-rw-r--r--NEWS6
-rw-r--r--elf/Makefile5
-rw-r--r--elf/dl-load.c4
-rw-r--r--elf/rtld.c5
5 files changed, 23 insertions, 9 deletions
diff --git a/ChangeLog b/ChangeLog
index defe406d72..05490349fb 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,15 @@
+2014-03-12  Paul Pluzhnikov  <ppluzhnikov@google.com>
+
+	[BZ #16381]
+
+	* elf/Makefile (tests): Add tst-pie2.
+        (tests-pie): Add tst-pie2.
+	* elf/tst-pie2.c: New file.
+	* elf/dl-load.c (_dl_map_object_from_fd): Assert correct l_type
+	for ET_EXEC.
+	* elf/rtld.c (map_doit): Load executable as lt_executable.
+	(dl_main): Likewise.
+
 2014-03-12  Joseph Myers  <joseph@codesourcery.com>
 
 	[BZ #16642]
diff --git a/NEWS b/NEWS
index 446ce94ec7..e8e7f80694 100644
--- a/NEWS
+++ b/NEWS
@@ -43,9 +43,9 @@ Version 2.19
   16055, 16071, 16072, 16074, 16077, 16078, 16103, 16112, 16143, 16144,
   16146, 16150, 16151, 16153, 16167, 16169, 16172, 16195, 16214, 16245,
   16271, 16274, 16283, 16289, 16293, 16314, 16316, 16330, 16337, 16338,
-  16356, 16365, 16366, 16369, 16372, 16375, 16379, 16384, 16385, 16386,
-  16387, 16390, 16394, 16398, 16400, 16407, 16408, 16414, 16430, 16431,
-  16453, 16474, 16506, 16510, 16529
+  16356, 16365, 16366, 16369, 16372, 16375, 16379, 16381, 16384, 16385,
+  16386, 16387, 16390, 16394, 16398, 16400, 16407, 16408, 16414, 16430,
+  16431, 16453, 16474, 16506, 16510, 16529
 
 * Slovenian translations for glibc messages have been contributed by the
   Translation Project's Slovenian team of translators.
diff --git a/elf/Makefile b/elf/Makefile
index e31ab920e3..2db3c980da 100644
--- a/elf/Makefile
+++ b/elf/Makefile
@@ -215,8 +215,8 @@ modules-names = testobj1 testobj2 testobj3 testobj4 testobj5 testobj6 \
 		tst-array5dep tst-null-argv-lib
 ifeq (yesyes,$(have-fpie)$(build-shared))
 modules-names += tst-piemod1
-tests += tst-pie1
-tests-pie += tst-pie1
+tests += tst-pie1 tst-pie2
+tests-pie += tst-pie1 tst-pie2
 endif
 modules-execstack-yes = tst-execstack-mod
 extra-test-objs += $(addsuffix .os,$(strip $(modules-names)))
@@ -901,6 +901,7 @@ $(objpfx)tst-array5-static-cmp.out: tst-array5-static.exp \
 	$(evaluate-test)
 
 CFLAGS-tst-pie1.c += $(pie-ccflag)
+CFLAGS-tst-pie2.c += $(pie-ccflag)
 
 $(objpfx)tst-pie1: $(objpfx)tst-piemod1.so
 
diff --git a/elf/dl-load.c b/elf/dl-load.c
index 6501ff2dca..8ebc1285ea 100644
--- a/elf/dl-load.c
+++ b/elf/dl-load.c
@@ -1534,8 +1534,8 @@ cannot enable executable stack as shared object requires");
   /* Signal that we closed the file.  */
   fd = -1;
 
-  if (l->l_type == lt_library && type == ET_EXEC)
-    l->l_type = lt_executable;
+  /* If this is ET_EXEC, we should have loaded it as lt_executable.  */
+  assert (type != ET_EXEC || l->l_type == lt_executable);
 
   l->l_entry += l->l_addr;
 
diff --git a/elf/rtld.c b/elf/rtld.c
index 7f1413af08..63e92d3006 100644
--- a/elf/rtld.c
+++ b/elf/rtld.c
@@ -623,7 +623,8 @@ static void
 map_doit (void *a)
 {
   struct map_args *args = (struct map_args *) a;
-  args->map = _dl_map_object (args->loader, args->str, lt_library, 0,
+  int type = (args->mode == __RTLD_OPENEXEC) ? lt_executable : lt_library;
+  args->map = _dl_map_object (args->loader, args->str, type, 0,
 			      args->mode, LM_ID_BASE);
 }
 
@@ -1075,7 +1076,7 @@ of this helper program; chances are you did not intend to run this program.\n\
       else
 	{
 	  HP_TIMING_NOW (start);
-	  _dl_map_object (NULL, rtld_progname, lt_library, 0,
+	  _dl_map_object (NULL, rtld_progname, lt_executable, 0,
 			  __RTLD_OPENEXEC, LM_ID_BASE);
 	  HP_TIMING_NOW (stop);