summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGeorge Rimar <grimar@accesssoftek.com>2016-10-04 08:44:03 +0000
committerGeorge Rimar <grimar@accesssoftek.com>2016-10-04 08:44:03 +0000
commit5cbf23664d7ad269b4c824ae3e86d6e9d1ec3c0a (patch)
tree10d54e6129b508e283bd4f40336602a478447a77
parent90893f0eabd04f012861472b2ec1444127ca6c92 (diff)
downloadbcm5719-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.h3
-rw-r--r--llvm/test/Object/Inputs/invalid-ext-symtab-index.elf-x86-64bin0 -> 480 bytes
-rw-r--r--llvm/test/Object/invalid.test4
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
new file mode 100644
index 00000000000..00ec5a5414b
--- /dev/null
+++ b/llvm/test/Object/Inputs/invalid-ext-symtab-index.elf-x86-64
Binary files differ
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
OpenPOWER on IntegriCloud