diff options
author | George Rimar <grimar@accesssoftek.com> | 2016-10-04 08:44:03 +0000 |
---|---|---|
committer | George Rimar <grimar@accesssoftek.com> | 2016-10-04 08:44:03 +0000 |
commit | 5cbf23664d7ad269b4c824ae3e86d6e9d1ec3c0a (patch) | |
tree | 10d54e6129b508e283bd4f40336602a478447a77 | |
parent | 90893f0eabd04f012861472b2ec1444127ca6c92 (diff) | |
download | bcm5719-llvm-5cbf23664d7ad269b4c824ae3e86d6e9d1ec3c0a.tar.gz bcm5719-llvm-5cbf23664d7ad269b4c824ae3e86d6e9d1ec3c0a.zip |
[Object/ELF] - Avoid possible crash in getExtendedSymbolTableIndex().
When using broken input object found using AFL,
getExtendedSymbolTableIndex() crashed because ShndxTable
was empty as object does not contain SHT_SYMTAB_SHNDX section.
Differential revision: https://reviews.llvm.org/D25189
llvm-svn: 283196
-rw-r--r-- | llvm/include/llvm/Object/ELF.h | 3 | ||||
-rw-r--r-- | llvm/test/Object/Inputs/invalid-ext-symtab-index.elf-x86-64 | bin | 0 -> 480 bytes | |||
-rw-r--r-- | llvm/test/Object/invalid.test | 4 |
3 files changed, 6 insertions, 1 deletions
diff --git a/llvm/include/llvm/Object/ELF.h b/llvm/include/llvm/Object/ELF.h index 80b8be03810..b08b427b811 100644 --- a/llvm/include/llvm/Object/ELF.h +++ b/llvm/include/llvm/Object/ELF.h @@ -225,7 +225,8 @@ uint32_t ELFFile<ELFT>::getExtendedSymbolTableIndex( ArrayRef<Elf_Word> ShndxTable) const { assert(Sym->st_shndx == ELF::SHN_XINDEX); unsigned Index = Sym - FirstSym; - + if (Index >= ShndxTable.size()) + report_fatal_error("Invalid symbol table index"); // The size of the table was checked in getSHNDXTable. return ShndxTable[Index]; } diff --git a/llvm/test/Object/Inputs/invalid-ext-symtab-index.elf-x86-64 b/llvm/test/Object/Inputs/invalid-ext-symtab-index.elf-x86-64 Binary files differnew file mode 100644 index 00000000000..00ec5a5414b --- /dev/null +++ b/llvm/test/Object/Inputs/invalid-ext-symtab-index.elf-x86-64 diff --git a/llvm/test/Object/invalid.test b/llvm/test/Object/invalid.test index a32c621cca6..e19583d4be1 100644 --- a/llvm/test/Object/invalid.test +++ b/llvm/test/Object/invalid.test @@ -54,3 +54,7 @@ INVALID-SYMTAB-SIZE: Invalid symbol table size RUN: not llvm-readobj -t %p/Inputs/invalid-xindex-size.elf 2>&1 | FileCheck --check-prefix=INVALID-XINDEX-SIZE %s INVALID-XINDEX-SIZE: Invalid data was encountered while parsing the file. + +RUN: not llvm-readobj -t %p/Inputs/invalid-ext-symtab-index.elf-x86-64 2>&1 | \ +RUN: FileCheck --check-prefix=INVALID-EXT-SYMTAB-INDEX %s +INVALID-EXT-SYMTAB-INDEX: Invalid symbol table index |