diff options
author | Mark Wielaard <mark@klomp.org> | 2018-09-12 23:38:47 +0200 |
---|---|---|
committer | Mark Wielaard <mark@klomp.org> | 2018-09-14 00:18:36 +0200 |
commit | 583d106753e805e75a6cbfeab79aa2965e042f69 (patch) | |
tree | 7afb2f5c671bdb4f1167537d2799d0d1661ab3dc | |
parent | 34534cc1740b198b8999dcf97222940a130905ce (diff) | |
download | elfutils-583d106753e805e75a6cbfeab79aa2965e042f69.tar.gz |
elflint: Use shnum and shstrndx instead of ehdr field directly.
We already got the right shnum and shstrndx. But were still using
e_shnum in one check for ELFCLASS64 (it was correct for ELFCLASS32).
And when getting section names in check_symtab we still used
e_shstrndx in two places.
Signed-off-by: Mark Wielaard <mark@klomp.org>
-rw-r--r-- | src/ChangeLog | 7 | ||||
-rw-r--r-- | src/elflint.c | 6 |
2 files changed, 10 insertions, 3 deletions
diff --git a/src/ChangeLog b/src/ChangeLog index 79da69b0..a093a737 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,12 @@ 2018-09-13 Mark Wielaard <mark@klomp.org> + * elflint.c (check_elf_header): Use shnum instead of e_shnum for all + checks. + (check_symtab): Use shstrndx instead of e_shstrndx to get section + names. + +2018-09-13 Mark Wielaard <mark@klomp.org> + * elfcmp.c (main): Get, check and shdrstrndx for section names. 2018-09-12 Mark Wielaard <mark@klomp.org> diff --git a/src/elflint.c b/src/elflint.c index b49436ca..3d445954 100644 --- a/src/elflint.c +++ b/src/elflint.c @@ -541,7 +541,7 @@ invalid number of program header table entries\n")); if (ehdr->e_shentsize != 0 && ehdr->e_shentsize != sizeof (Elf64_Shdr)) ERROR (gettext ("invalid section header size: %hd\n"), ehdr->e_shentsize); - else if (ehdr->e_shoff + ehdr->e_shnum * ehdr->e_shentsize > size) + else if (ehdr->e_shoff + shnum * ehdr->e_shentsize > size) ERROR (gettext ("invalid section header position or size\n")); } } @@ -956,7 +956,7 @@ section [%2d] '%s': symbol %zu: non-local section symbol\n"), destshdr = gelf_getshdr (gscn, &destshdr_mem); assert (destshdr != NULL); const char *sname = elf_strptr (ebl->elf, - ehdr->e_shstrndx, + shstrndx, destshdr->sh_name); if (sname != NULL) { @@ -977,7 +977,7 @@ section [%2d] '%s': symbol %zu: non-local section symbol\n"), const char *sname = ((destshdr == NULL || xndx == SHN_UNDEF) ? NULL - : elf_strptr (ebl->elf, ehdr->e_shstrndx, + : elf_strptr (ebl->elf, shstrndx, destshdr->sh_name)); if (sname == NULL) { |