diff options
Diffstat (limited to 'usr/src')
-rw-r--r-- | usr/src/tools/chk4ubin/chk4ubin.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/usr/src/tools/chk4ubin/chk4ubin.c b/usr/src/tools/chk4ubin/chk4ubin.c index 51d372939a..3330cde22b 100644 --- a/usr/src/tools/chk4ubin/chk4ubin.c +++ b/usr/src/tools/chk4ubin/chk4ubin.c @@ -152,19 +152,29 @@ chk4ubin(char *root, char *binary) return (1); } - elf_version(EV_CURRENT); + if (elf_version(EV_CURRENT) == EV_NONE) { + (void) printf("%s: unsupported version.\n", whoami); + (void) close(fd); + return (1); + } + elf = elf_begin(fd, ELF_C_READ, NULL); + if (elf == NULL) { + (void) printf("%s: elf_begin() failed.\n", whoami); + (void) close(fd); + return (1); + } symscn = NULL; while ((symscn = elf_nextscn(elf, symscn)) != NULL) { - gelf_getshdr(symscn, &symhdr); + (void) gelf_getshdr(symscn, &symhdr); switch (symhdr.sh_type) { case SHT_SYMTAB: found_symtab = 1; symtab_size = symhdr.sh_size; strscn = elf_getscn(elf, symhdr.sh_link); if (strscn != NULL) { - gelf_getshdr(strscn, &strhdr); + (void) gelf_getshdr(strscn, &strhdr); strtab_size = strhdr.sh_size; found_strtab = 1; } @@ -174,7 +184,7 @@ chk4ubin(char *root, char *binary) break; } - elf_end(elf); + (void) elf_end(elf); (void) close(fd); if (found_symtab && found_strtab) { |