diff options
-rw-r--r-- | ChangeLog | 6 | ||||
-rw-r--r-- | elf/pldd-xx.c | 2 | ||||
-rw-r--r-- | elf/pldd.c | 16 |
3 files changed, 13 insertions, 11 deletions
diff --git a/ChangeLog b/ChangeLog index 299f86b815..3f8a82174b 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2011-09-05 Ulrich Drepper <drepper@gmail.com> + + * elf/pldd.c (get_process_info): Don't read whole ELF header, just + e_ident. Don't pass to find_mapsXX. + * elf/pldd-xx.c (find_mapsXX): Remove second parameter. + 2011-07-20 Liubov Dmitrieva <liubov.dmitrieva@intel.com> * sysdeps/x86_64/multiarch/Makefile (sysdep_routines): Add diff --git a/elf/pldd-xx.c b/elf/pldd-xx.c index 59419bce33..8ecd468dd1 100644 --- a/elf/pldd-xx.c +++ b/elf/pldd-xx.c @@ -79,7 +79,7 @@ static_assert (r_map, (offsetof (struct r_debug, r_map) static int -E(find_maps) (pid_t pid, EW(Ehdr) *ehdr, void *auxv, size_t auxv_size) +E(find_maps) (pid_t pid, void *auxv, size_t auxv_size) { EW(Addr) phdr = 0; unsigned int phnum = 0; diff --git a/elf/pldd.c b/elf/pldd.c index 29879f7e85..e97d96ae02 100644 --- a/elf/pldd.c +++ b/elf/pldd.c @@ -247,17 +247,13 @@ get_process_info (int dfd, long int pid) return EXIT_FAILURE; } - union - { - Elf32_Ehdr ehdr32; - Elf64_Ehdr ehdr64; - } uehdr; - if (read (fd, &uehdr, sizeof (uehdr)) != sizeof (uehdr)) + char e_ident[EI_NIDENT]; + if (read (fd, e_ident, EI_NIDENT) != EI_NIDENT) goto no_info; close (fd); - if (memcmp (uehdr.ehdr32.e_ident, ELFMAG, SELFMAG) != 0) + if (memcmp (e_ident, ELFMAG, SELFMAG) != 0) { error (0, 0, gettext ("process %lu is no ELF program"), pid); return EXIT_FAILURE; @@ -287,10 +283,10 @@ get_process_info (int dfd, long int pid) close (fd); int retval; - if (uehdr.ehdr32.e_ident[EI_CLASS] == ELFCLASS32) - retval = find_maps32 (pid, &uehdr.ehdr32, auxv, auxv_size); + if (e_ident[EI_CLASS] == ELFCLASS32) + retval = find_maps32 (pid, auxv, auxv_size); else - retval = find_maps64 (pid, &uehdr.ehdr64, auxv, auxv_size); + retval = find_maps64 (pid, auxv, auxv_size); free (auxv); close (memfd); |