From 65e1bcf2b2355e20c0d452b251bcac687ae5ac8e Mon Sep 17 00:00:00 2001 From: Kostya Kortchinsky Date: Wed, 29 Aug 2018 19:41:28 +0000 Subject: [PATCH] [sanitizer] Revert D50940 Summary: The previous version of the patch makes some code unable to distinguish failure to map address 0 and error. Revert to turn the bots back to green while figuring out a new approach. Reviewers: eugenis Reviewed By: eugenis Subscribers: kubamracek, delcypher, #sanitizers, llvm-commits Differential Revision: https://reviews.llvm.org/D51451 llvm-svn: 340957 --- compiler-rt/lib/asan/asan_linux.cc | 2 +- compiler-rt/lib/asan/asan_premap_shadow.cc | 2 +- compiler-rt/lib/hwasan/hwasan_dynamic_shadow.cc | 2 +- .../sanitizer_common/sanitizer_allocator_primary64.h | 2 +- .../lib/sanitizer_common/sanitizer_mac_libcdep.cc | 4 +++- .../lib/sanitizer_common/sanitizer_posix_libcdep.cc | 11 +++-------- compiler-rt/lib/scudo/scudo_allocator_secondary.h | 2 +- 7 files changed, 11 insertions(+), 14 deletions(-) diff --git a/compiler-rt/lib/asan/asan_linux.cc b/compiler-rt/lib/asan/asan_linux.cc index cb0a613698e3d..625f32d408dfa 100644 --- a/compiler-rt/lib/asan/asan_linux.cc +++ b/compiler-rt/lib/asan/asan_linux.cc @@ -126,7 +126,7 @@ uptr FindDynamicShadowStart() { uptr map_size = shadow_size + left_padding + alignment; uptr map_start = (uptr)MmapNoAccess(map_size); - CHECK(map_start); + CHECK_NE(map_start, ~(uptr)0); uptr shadow_start = RoundUpTo(map_start + left_padding, alignment); UnmapFromTo(map_start, shadow_start - left_padding); diff --git a/compiler-rt/lib/asan/asan_premap_shadow.cc b/compiler-rt/lib/asan/asan_premap_shadow.cc index 9002fd61675cb..229eba99fe0eb 100644 --- a/compiler-rt/lib/asan/asan_premap_shadow.cc +++ b/compiler-rt/lib/asan/asan_premap_shadow.cc @@ -40,7 +40,7 @@ uptr PremapShadow() { uptr map_size = shadow_size + left_padding + alignment; uptr map_start = (uptr)MmapNoAccess(map_size); - CHECK(map_start); + CHECK_NE(map_start, ~(uptr)0); uptr shadow_start = RoundUpTo(map_start + left_padding, alignment); uptr shadow_end = shadow_start + shadow_size; diff --git a/compiler-rt/lib/hwasan/hwasan_dynamic_shadow.cc b/compiler-rt/lib/hwasan/hwasan_dynamic_shadow.cc index 0eb4956ce8331..17338003aa652 100644 --- a/compiler-rt/lib/hwasan/hwasan_dynamic_shadow.cc +++ b/compiler-rt/lib/hwasan/hwasan_dynamic_shadow.cc @@ -46,7 +46,7 @@ static uptr MapDynamicShadow(uptr shadow_size_bytes) { const uptr map_size = shadow_size + left_padding + alignment; const uptr map_start = (uptr)MmapNoAccess(map_size); - CHECK(map_start); + CHECK_NE(map_start, ~(uptr)0); const uptr shadow_start = RoundUpTo(map_start + left_padding, alignment); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h b/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h index 88134a6ad781b..6acb4f8bc56dd 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h +++ b/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h @@ -77,7 +77,7 @@ class SizeClassAllocator64 { } else { NonConstSpaceBeg = address_range.Init(TotalSpaceSize, PrimaryAllocatorName); - CHECK(NonConstSpaceBeg); + CHECK_NE(NonConstSpaceBeg, ~(uptr)0); } SetReleaseToOSIntervalMs(release_to_os_interval_ms); MapWithCallbackOrDie(SpaceEnd(), AdditionalSize()); diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_mac_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_mac_libcdep.cc index 43fde2bbfabca..090f17c888b41 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_mac_libcdep.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_mac_libcdep.cc @@ -15,12 +15,14 @@ #if SANITIZER_MAC #include "sanitizer_mac.h" +#include + namespace __sanitizer { void RestrictMemoryToMaxAddress(uptr max_address) { uptr size_to_mmap = GetMaxUserVirtualAddress() + 1 - max_address; void *res = MmapFixedNoAccess(max_address, size_to_mmap, "high gap"); - CHECK(res); + CHECK(res != MAP_FAILED); } } // namespace __sanitizer diff --git a/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc b/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc index d30c306070653..266e9bdba051e 100644 --- a/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc +++ b/compiler-rt/lib/sanitizer_common/sanitizer_posix_libcdep.cc @@ -387,18 +387,13 @@ void *MmapFixedNoAccess(uptr fixed_addr, uptr size, const char *name) { unsigned flags = MAP_PRIVATE | MAP_FIXED | MAP_NORESERVE; if (fd == -1) flags |= MAP_ANON; - uptr p = internal_mmap((void *)fixed_addr, size, PROT_NONE, flags, fd, 0); - if (internal_iserror(p)) - return nullptr; - return (void *)p; + return (void *)internal_mmap((void *)fixed_addr, size, PROT_NONE, flags, fd, + 0); } void *MmapNoAccess(uptr size) { unsigned flags = MAP_PRIVATE | MAP_ANON | MAP_NORESERVE; - uptr p = internal_mmap(nullptr, size, PROT_NONE, flags, -1, 0); - if (internal_iserror(p)) - return nullptr; - return (void *)p; + return (void *)internal_mmap(nullptr, size, PROT_NONE, flags, -1, 0); } // This function is defined elsewhere if we intercepted pthread_attr_getstack. diff --git a/compiler-rt/lib/scudo/scudo_allocator_secondary.h b/compiler-rt/lib/scudo/scudo_allocator_secondary.h index 882236bdd9925..ff6246e25883b 100644 --- a/compiler-rt/lib/scudo/scudo_allocator_secondary.h +++ b/compiler-rt/lib/scudo/scudo_allocator_secondary.h @@ -86,7 +86,7 @@ class LargeMmapAllocator { ReservedAddressRange AddressRange; uptr ReservedBeg = AddressRange.Init(ReservedSize, SecondaryAllocatorName); - if (UNLIKELY(!ReservedBeg)) + if (UNLIKELY(ReservedBeg == ~static_cast(0))) return nullptr; // A page-aligned pointer is assumed after that, so check it now. DCHECK(IsAligned(ReservedBeg, PageSize));