add some check before accessing data:
authorsemarie <semarie@openbsd.org>
Tue, 23 Jun 2015 13:43:08 +0000 (13:43 +0000)
committersemarie <semarie@openbsd.org>
Tue, 23 Jun 2015 13:43:08 +0000 (13:43 +0000)
 - if section header table is be present
 - consistency of section header table size

ok miod@

usr.bin/nm/elf.c

index c1033bb..17906a4 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: elf.c,v 1.28 2015/05/17 20:19:08 guenther Exp $       */
+/*     $OpenBSD: elf.c,v 1.29 2015/06/23 13:43:08 semarie Exp $        */
 
 /*
  * Copyright (c) 2003 Michael Shalayeff
@@ -149,6 +149,16 @@ elf_load_shdrs(const char *name, FILE *fp, off_t foff, Elf_Ehdr *head)
 
        elf_fix_header(head);
 
+       if (head->e_shnum == 0) {
+               warnx("%s: no section header table", name);
+               return (NULL);
+       }
+
+       if (head->e_shstrndx >= head->e_shnum) {
+               warnx("%s: inconsistent section header table", name);
+               return (NULL);
+       }
+
        if ((shdr = calloc(head->e_shentsize, head->e_shnum)) == NULL) {
                warn("%s: malloc shdr", name);
                return (NULL);