From: Mark Wielaard Date: Wed, 12 Sep 2018 21:38:47 +0000 (+0200) Subject: elflint: Use shnum and shstrndx instead of ehdr field directly. X-Git-Tag: elfutils-0.174~5 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=583d106753e805e75a6cbfeab79aa2965e042f69;p=platform%2Fupstream%2Felfutils.git 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 --- diff --git a/src/ChangeLog b/src/ChangeLog index 79da69b..a093a73 100644 --- a/src/ChangeLog +++ b/src/ChangeLog @@ -1,5 +1,12 @@ 2018-09-13 Mark Wielaard + * 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 + * elfcmp.c (main): Get, check and shdrstrndx for section names. 2018-09-12 Mark Wielaard diff --git a/src/elflint.c b/src/elflint.c index b49436c..3d44595 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) {