big enough to fill at least one Elf_Shdr.
While here, inverts calloc() arguments to be calloc(nmemb, size),
according to fread() call after.
This problem was found with afl, with e_shentsize=1.
ok miod@
-/* $OpenBSD: elf.c,v 1.30 2015/06/23 15:02:58 semarie Exp $ */
+/* $OpenBSD: elf.c,v 1.31 2015/06/23 15:13:29 semarie Exp $ */
/*
* Copyright (c) 2003 Michael Shalayeff
return (NULL);
}
- if ((shdr = calloc(head->e_shentsize, head->e_shnum)) == NULL) {
+ if (head->e_shentsize < sizeof(Elf_Shdr)) {
+ warnx("%s: inconsistent section header size", name);
+ return (NULL);
+ }
+
+ if ((shdr = calloc(head->e_shnum, head->e_shentsize)) == NULL) {
warn("%s: malloc shdr", name);
return (NULL);
}