summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2018-09-12 23:38:47 +0200
committerMark Wielaard <mark@klomp.org>2018-09-14 00:18:36 +0200
commit583d106753e805e75a6cbfeab79aa2965e042f69 (patch)
tree7afb2f5c671bdb4f1167537d2799d0d1661ab3dc
parent34534cc1740b198b8999dcf97222940a130905ce (diff)
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/ChangeLog7
-rw-r--r--src/elflint.c6
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)
{