summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2019-04-28 18:02:05 +0200
committerMark Wielaard <mark@klomp.org>2019-04-28 18:02:05 +0200
commit0720b2ca333186b0d3f4a5b73d5ae2bd8fc8cb4b (patch)
treeb65476b46d729a9d4750144556439c289ad75cf4
parent207d8ec3778a3101ee1b8ece9c63c0ff97450789 (diff)
downloadelfutils-0720b2ca333186b0d3f4a5b73d5ae2bd8fc8cb4b.tar.gz
size: Robustify against gelf_getshdr returning NULL.
Signed-off-by: Mark Wielaard <mark@klomp.org>
-rw-r--r--src/ChangeLog7
-rw-r--r--src/size.c6
2 files changed, 13 insertions, 0 deletions
diff --git a/src/ChangeLog b/src/ChangeLog
index 3020bd76..e3e411ef 100644
--- a/src/ChangeLog
+++ b/src/ChangeLog
@@ -1,5 +1,12 @@
2019-04-28 Mark Wielaard <mark@klomp.org>
+ * size.c (show_sysv): Call INTERNAL_ERROR if gelf_getshdr
+ returns NULL.
+ (show_sysv_one_line): Call error with EXIT_FAILURE if
+ gelf_getshdr returns NULL.
+
+2019-04-28 Mark Wielaard <mark@klomp.org>
+
* nm.c (show_symbols_sysv): Check gelf_getshdr doesn't return
NULL. Simplify naming of invalid sections, don't use alloca.
diff --git a/src/size.c b/src/size.c
index f01fd880..a25d4471 100644
--- a/src/size.c
+++ b/src/size.c
@@ -428,6 +428,9 @@ show_sysv (Elf *elf, const char *prefix, const char *fname,
GElf_Shdr shdr_mem;
GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
+ if (shdr == NULL)
+ INTERNAL_ERROR (fullname);
+
/* Ignore all sections which are not used at runtime. */
if ((shdr->sh_flags & SHF_ALLOC) != 0)
{
@@ -475,6 +478,9 @@ show_sysv_one_line (Elf *elf)
GElf_Shdr shdr_mem;
GElf_Shdr *shdr = gelf_getshdr (scn, &shdr_mem);
+ if (unlikely (shdr == NULL))
+ error (EXIT_FAILURE, 0, gettext ("cannot get section header"));
+
/* Ignore all sections which are not used at runtime. */
if ((shdr->sh_flags & SHF_ALLOC) == 0)
continue;