diff options
| author | Greg Fitzgerald <garious@gmail.com> | 2015-02-19 20:42:23 +0000 |
|---|---|---|
| committer | Greg Fitzgerald <garious@gmail.com> | 2015-02-19 20:42:23 +0000 |
| commit | cdaea4db269646e25b97e8139a37849303c56e92 (patch) | |
| tree | 48020e65d5e5b61ecb8170d12fd7941a7394c5aa /lld/lib | |
| parent | 68ca67b212c3be05ab5a8f5f3c7afcaec785834f (diff) | |
| download | bcm5719-llvm-cdaea4db269646e25b97e8139a37849303c56e92.tar.gz bcm5719-llvm-cdaea4db269646e25b97e8139a37849303c56e92.zip | |
Fix heap-buffer-overflow bugs identified by the Address Sanitizer
Differential Revision: http://reviews.llvm.org/D7733
llvm-svn: 229912
Diffstat (limited to 'lld/lib')
| -rw-r--r-- | lld/lib/ReaderWriter/MachO/ArchHandler.cpp | 2 | ||||
| -rw-r--r-- | lld/lib/ReaderWriter/MachO/CompactUnwindPass.cpp | 3 |
2 files changed, 5 insertions, 0 deletions
diff --git a/lld/lib/ReaderWriter/MachO/ArchHandler.cpp b/lld/lib/ReaderWriter/MachO/ArchHandler.cpp index 90c838cd84a..cb20907b3e3 100644 --- a/lld/lib/ReaderWriter/MachO/ArchHandler.cpp +++ b/lld/lib/ReaderWriter/MachO/ArchHandler.cpp @@ -142,6 +142,8 @@ uint32_t ArchHandler::readU32(const uint8_t *addr, bool isBig) { bool ArchHandler::isDwarfCIE(bool isBig, const DefinedAtom *atom) { assert(atom->contentType() == DefinedAtom::typeCFI); + if (atom->rawContent().size() < sizeof(uint32_t)) + return false; uint32_t size = read32(atom->rawContent().data(), isBig); uint32_t idOffset = sizeof(uint32_t); diff --git a/lld/lib/ReaderWriter/MachO/CompactUnwindPass.cpp b/lld/lib/ReaderWriter/MachO/CompactUnwindPass.cpp index 40b257cd7a4..74b013f1d50 100644 --- a/lld/lib/ReaderWriter/MachO/CompactUnwindPass.cpp +++ b/lld/lib/ReaderWriter/MachO/CompactUnwindPass.cpp @@ -411,6 +411,9 @@ private: } } + if (atom->rawContent().size() < 4 * sizeof(uint32_t)) + return entry; + using normalized::read32; entry.rangeLength = read32(atom->rawContent().data() + 2 * sizeof(uint32_t), _isBig); |

