libasm: Check return value of gelf_update_ehdr in asm_end.
authorMark Wielaard <mark@klomp.org>
Wed, 6 Mar 2019 19:02:52 +0000 (20:02 +0100)
committerMark Wielaard <mark@klomp.org>
Wed, 6 Mar 2019 19:02:52 +0000 (20:02 +0100)
In theory the gelf_update_ehdr call could fail. Immediately report an
error in that case.

Signed-off-by: Mark Wielaard <mark@klomp.org>
libasm/ChangeLog
libasm/asm_end.c

index 92dfd72..05b830c 100644 (file)
@@ -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.
index 5aab8df..99e9501 100644 (file)
@@ -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))