summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Wielaard <mark@klomp.org>2019-03-06 20:02:52 +0100
committerMark Wielaard <mark@klomp.org>2019-03-06 20:02:52 +0100
commitff063240ac97302f289b12ac7dff655cdc0d5d70 (patch)
tree2097b997a2e71ffcf7be207d60c8bd8307ba0421
parent75e147d0ab85262d9bb2fff093db7ce67dbd4b62 (diff)
libasm: Check return value of gelf_update_ehdr in asm_end.
In theory the gelf_update_ehdr call could fail. Immediately report an error in that case. Signed-off-by: Mark Wielaard <mark@klomp.org>
-rw-r--r--libasm/ChangeLog4
-rw-r--r--libasm/asm_end.c6
2 files changed, 9 insertions, 1 deletions
diff --git a/libasm/ChangeLog b/libasm/ChangeLog
index 92dfd729..05b830c8 100644
--- a/libasm/ChangeLog
+++ b/libasm/ChangeLog
@@ -1,3 +1,7 @@
+2019-03-06 Mark Wielaard <mark@klomp.org>
+
+ * asm_end.c (binary_end): Check return value of gelf_update_ehdr.
+
2018-10-19 Mark Wielaard <mark@klomp.org>
* disasm_cb.c (read_symtab_exec): Check sh_entsize is not zero.
diff --git a/libasm/asm_end.c b/libasm/asm_end.c
index 5aab8dfa..99e95017 100644
--- a/libasm/asm_end.c
+++ b/libasm/asm_end.c
@@ -460,7 +460,11 @@ binary_end (AsmCtx_t *ctx)
else
ehdr->e_shstrndx = elf_ndxscn (shstrscn);
- gelf_update_ehdr (ctx->out.elf, ehdr);
+ if (unlikely (gelf_update_ehdr (ctx->out.elf, ehdr) == 0))
+ {
+ __libasm_seterrno (ASM_E_LIBELF);
+ result = -1;
+ }
/* Write out the ELF file. */
if (unlikely (elf_update (ctx->out.elf, ELF_C_WRITE_MMAP) < 0))