mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2024-11-23 11:13:28 +01:00
[Object/ELF] - Do not allow overflow when checking section size/offset.
Overflow was the reason of incorrect passing the check, patch fixes the case. Differentail revision: https://reviews.llvm.org/D25514 llvm-svn: 285284
This commit is contained in:
parent
f764591abe
commit
9ee5fd9330
@ -229,7 +229,8 @@ ELFFile<ELFT>::getSectionContentsAsArray(const Elf_Shdr *Sec) const {
|
||||
|
||||
if (Size % sizeof(T))
|
||||
return object_error::parse_failed;
|
||||
if (Offset + Size > Buf.size())
|
||||
if ((std::numeric_limits<uintX_t>::max() - Offset < Size) ||
|
||||
Offset + Size > Buf.size())
|
||||
return object_error::parse_failed;
|
||||
|
||||
const T *Start = reinterpret_cast<const T *>(base() + Offset);
|
||||
|
BIN
test/Object/Inputs/invalid-section-size2.elf
Normal file
BIN
test/Object/Inputs/invalid-section-size2.elf
Normal file
Binary file not shown.
@ -72,3 +72,7 @@ INVALID-RELOC-SH-OFFSET: Invalid data was encountered while parsing the file
|
||||
RUN: not llvm-readobj -t %p/Inputs/invalid-sections-address-alignment.x86-64 2>&1 | \
|
||||
RUN: FileCheck --check-prefix=INVALID-SEC-ADDRESS-ALIGNMENT %s
|
||||
INVALID-SEC-ADDRESS-ALIGNMENT: Invalid data was encountered while parsing the file
|
||||
|
||||
RUN: not llvm-readobj -t %p/Inputs/invalid-section-size2.elf 2>&1 | \
|
||||
RUN: FileCheck --check-prefix=INVALID-SECTION-SIZE2 %s
|
||||
INVALID-SECTION-SIZE2: Invalid data was encountered while parsing the file.
|
||||
|
Loading…
Reference in New Issue
Block a user