diff options
author | Paul Pluzhnikov <ppluzhnikov@google.com> | 2014-03-12 15:58:39 -0700 |
---|---|---|
committer | Paul Pluzhnikov <ppluzhnikov@google.com> | 2014-03-12 15:58:39 -0700 |
commit | 798212a01311491d5e14fcda687460b75f8ca286 (patch) | |
tree | 97d78fbe6bd1a25dd6f1d181ae3a0efc90479d52 | |
parent | abe6d90cc8c1c212dab7cde4468f9ed895d6ba86 (diff) | |
download | glibc-798212a01311491d5e14fcda687460b75f8ca286.zip glibc-798212a01311491d5e14fcda687460b75f8ca286.tar.gz glibc-798212a01311491d5e14fcda687460b75f8ca286.tar.bz2 |
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-- | ChangeLog | 12 | ||||
-rw-r--r-- | NEWS | 6 | ||||
-rw-r--r-- | elf/Makefile | 5 | ||||
-rw-r--r-- | elf/dl-load.c | 4 | ||||
-rw-r--r-- | elf/rtld.c | 5 |
5 files changed, 23 insertions, 9 deletions
@@ -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] @@ -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 e31ab92..2db3c98 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 6501ff2..8ebc128 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; @@ -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); |