diff options
| author | Kostya Kortchinsky <kostyak@google.com> | 2019-11-14 14:33:23 -0800 |
|---|---|---|
| committer | Kostya Kortchinsky <kostyak@google.com> | 2019-11-15 08:33:57 -0800 |
| commit | f018246c20481d222af4bab1868e8903c35c73d2 (patch) | |
| tree | 1374279d970ef6f55d7528591cc48f5447120bb0 /compiler-rt/lib/scudo/standalone | |
| parent | 713c30b389602eda5c70b696e8c640487cc8b2cb (diff) | |
| download | bcm5719-llvm-f018246c20481d222af4bab1868e8903c35c73d2.tar.gz bcm5719-llvm-f018246c20481d222af4bab1868e8903c35c73d2.zip | |
[scudo][standalone] Enabled SCUDO_DEBUG for tests + fixes
Summary:
`SCUDO_DEBUG` was not enabled for unit tests, meaning the `DCHECK`s
were never tripped. While turning this on, I discovered that a few
of those not-exercised checks were actually wrong. This CL addresses
those incorrect checks.
Not that to work in tests `CHECK_IMPL` has to explicitely use the
`scudo` namespace. Also changes a C cast to a C++ cast.
Reviewers: hctim, pcc, cferris, eugenis, vitalybuka
Subscribers: mgorny, #sanitizers, llvm-commits
Tags: #sanitizers, #llvm
Differential Revision: https://reviews.llvm.org/D70276
Diffstat (limited to 'compiler-rt/lib/scudo/standalone')
| -rw-r--r-- | compiler-rt/lib/scudo/standalone/combined.h | 2 | ||||
| -rw-r--r-- | compiler-rt/lib/scudo/standalone/internal_defs.h | 10 | ||||
| -rw-r--r-- | compiler-rt/lib/scudo/standalone/secondary.h | 2 | ||||
| -rw-r--r-- | compiler-rt/lib/scudo/standalone/size_class_map.h | 5 | ||||
| -rw-r--r-- | compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt | 1 | ||||
| -rw-r--r-- | compiler-rt/lib/scudo/standalone/vector.h | 3 |
6 files changed, 13 insertions, 10 deletions
diff --git a/compiler-rt/lib/scudo/standalone/combined.h b/compiler-rt/lib/scudo/standalone/combined.h index 2f8d82b58db..f4fa5d4b99a 100644 --- a/compiler-rt/lib/scudo/standalone/combined.h +++ b/compiler-rt/lib/scudo/standalone/combined.h @@ -222,7 +222,7 @@ public: if (UNLIKELY(!isAligned(UserPtr, Alignment))) { const uptr AlignedUserPtr = roundUpTo(UserPtr, Alignment); const uptr Offset = AlignedUserPtr - UserPtr; - DCHECK_GT(Offset, 2 * sizeof(u32)); + DCHECK_GE(Offset, 2 * sizeof(u32)); // The BlockMarker has no security purpose, but is specifically meant for // the chunk iteration function that can be used in debugging situations. // It is the only situation where we have to locate the start of a chunk diff --git a/compiler-rt/lib/scudo/standalone/internal_defs.h b/compiler-rt/lib/scudo/standalone/internal_defs.h index 64ed238ebfe..f80c0f621a4 100644 --- a/compiler-rt/lib/scudo/standalone/internal_defs.h +++ b/compiler-rt/lib/scudo/standalone/internal_defs.h @@ -84,12 +84,12 @@ void NORETURN reportCheckFailed(const char *File, int Line, #define CHECK_IMPL(C1, Op, C2) \ do { \ - u64 V1 = (u64)(C1); \ - u64 V2 = (u64)(C2); \ + scudo::u64 V1 = (scudo::u64)(C1); \ + scudo::u64 V2 = (scudo::u64)(C2); \ if (UNLIKELY(!(V1 Op V2))) { \ - reportCheckFailed(__FILE__, __LINE__, "(" #C1 ") " #Op " (" #C2 ")", V1, \ - V2); \ - die(); \ + scudo::reportCheckFailed(__FILE__, __LINE__, \ + "(" #C1 ") " #Op " (" #C2 ")", V1, V2); \ + scudo::die(); \ } \ } while (false) diff --git a/compiler-rt/lib/scudo/standalone/secondary.h b/compiler-rt/lib/scudo/standalone/secondary.h index bca783a3b60..f288fc7d759 100644 --- a/compiler-rt/lib/scudo/standalone/secondary.h +++ b/compiler-rt/lib/scudo/standalone/secondary.h @@ -114,7 +114,7 @@ template <uptr MaxFreeListSize> void *MapAllocator<MaxFreeListSize>::allocate(uptr Size, uptr AlignmentHint, uptr *BlockEnd, bool ZeroContents) { - DCHECK_GT(Size, AlignmentHint); + DCHECK_GE(Size, AlignmentHint); const uptr PageSize = getPageSizeCached(); const uptr RoundedSize = roundUpTo(Size + LargeBlock::getHeaderSize(), PageSize); diff --git a/compiler-rt/lib/scudo/standalone/size_class_map.h b/compiler-rt/lib/scudo/standalone/size_class_map.h index dfef0865b9d..59d6ede57ed 100644 --- a/compiler-rt/lib/scudo/standalone/size_class_map.h +++ b/compiler-rt/lib/scudo/standalone/size_class_map.h @@ -120,7 +120,8 @@ public: if (C < LargestClassId) CHECK_EQ(getClassIdBySize(S + 1), C + 1); CHECK_EQ(getClassIdBySize(S - 1), C); - CHECK_GT(getSizeByClassId(C), getSizeByClassId(C - 1)); + if (C - 1 != BatchClassId) + CHECK_GT(getSizeByClassId(C), getSizeByClassId(C - 1)); } // Do not perform the loop if the maximum size is too large. if (MaxSizeLog > 19) @@ -129,7 +130,7 @@ public: const uptr C = getClassIdBySize(S); CHECK_LT(C, NumClasses); CHECK_GE(getSizeByClassId(C), S); - if (C > 0) + if (C - 1 != BatchClassId) CHECK_LT(getSizeByClassId(C - 1), S); } } diff --git a/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt b/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt index f26a8505096..e3b2073d166 100644 --- a/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt +++ b/compiler-rt/lib/scudo/standalone/tests/CMakeLists.txt @@ -11,6 +11,7 @@ set(SCUDO_UNITTEST_CFLAGS -I${COMPILER_RT_SOURCE_DIR}/lib -I${COMPILER_RT_SOURCE_DIR}/lib/scudo/standalone -DGTEST_HAS_RTTI=0 + -DSCUDO_DEBUG=1 # Extra flags for the C++ tests # TODO(kostyak): find a way to make -fsized-deallocation work -Wno-mismatched-new-delete) diff --git a/compiler-rt/lib/scudo/standalone/vector.h b/compiler-rt/lib/scudo/standalone/vector.h index 3cb4005ed29..6ca350a2577 100644 --- a/compiler-rt/lib/scudo/standalone/vector.h +++ b/compiler-rt/lib/scudo/standalone/vector.h @@ -84,7 +84,8 @@ private: DCHECK_LE(Size, NewCapacity); const uptr NewCapacityBytes = roundUpTo(NewCapacity * sizeof(T), getPageSizeCached()); - T *NewData = (T *)map(nullptr, NewCapacityBytes, "scudo:vector"); + T *NewData = + reinterpret_cast<T *>(map(nullptr, NewCapacityBytes, "scudo:vector")); if (Data) { memcpy(NewData, Data, Size * sizeof(T)); unmap(Data, CapacityBytes); |

