[PATCH] D56239: [hwasan] Switch to 64 allocator with a dense size class map.
Evgenii Stepanov via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Thu Jan 3 15:17:26 PST 2019
eugenis updated this revision to Diff 180158.
eugenis added a comment.
update tests
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D56239/new/
https://reviews.llvm.org/D56239
Files:
compiler-rt/lib/hwasan/hwasan_allocator.h
compiler-rt/lib/sanitizer_common/sanitizer_allocator_combined.h
compiler-rt/lib/sanitizer_common/sanitizer_allocator_size_class_map.h
compiler-rt/test/hwasan/TestCases/heap-buffer-overflow.c
compiler-rt/test/hwasan/TestCases/use-after-free.c
Index: compiler-rt/test/hwasan/TestCases/use-after-free.c
===================================================================
--- compiler-rt/test/hwasan/TestCases/use-after-free.c
+++ compiler-rt/test/hwasan/TestCases/use-after-free.c
@@ -23,7 +23,7 @@
// CHECK: [[TYPE]] of size 1 at {{.*}} tags: [[PTR_TAG:[0-9a-f][0-9a-f]]]/[[MEM_TAG:[0-9a-f][0-9a-f]]] (ptr/mem)
// CHECK: #0 {{.*}} in main {{.*}}use-after-free.c:[[@LINE-2]]
// Offset is 5 or 11 depending on left/right alignment.
- // CHECK: is a small unallocated heap chunk; size: 16 offset: {{5|11}}
+ // CHECK: is a small unallocated heap chunk; size: 32 offset: {{5|11}}
// CHECK: is located 5 bytes inside of 10-byte region
//
// CHECK: freed by thread {{.*}} here:
Index: compiler-rt/test/hwasan/TestCases/heap-buffer-overflow.c
===================================================================
--- compiler-rt/test/hwasan/TestCases/heap-buffer-overflow.c
+++ compiler-rt/test/hwasan/TestCases/heap-buffer-overflow.c
@@ -43,7 +43,6 @@
// CHECK80-RIGHT: allocated heap chunk; size: 32 offset:
// CHECK80-RIGHT: is located 50 bytes to the right of 30-byte region
//
-// CHECKm30: allocated heap chunk; size: 32 offset: 2
// CHECKm30: is located 30 bytes to the left of 30-byte region
//
// CHECKMm30: is a large allocated heap chunk; size: 1003520 offset: -30
Index: compiler-rt/lib/sanitizer_common/sanitizer_allocator_size_class_map.h
===================================================================
--- compiler-rt/lib/sanitizer_common/sanitizer_allocator_size_class_map.h
+++ compiler-rt/lib/sanitizer_common/sanitizer_allocator_size_class_map.h
@@ -237,3 +237,6 @@
// allowing for denser per-class arrays, smaller memory footprint and usually
// better performances in threaded environments.
typedef SizeClassMap<3, 4, 8, 17, 8, 10> DenseSizeClassMap;
+// Similar to VeryCompact map above, this one has a small number of different
+// size classes, and also reduced thread-local caches.
+typedef SizeClassMap<2, 5, 9, 16, 8, 10> VeryDenseSizeClassMap;
Index: compiler-rt/lib/sanitizer_common/sanitizer_allocator_combined.h
===================================================================
--- compiler-rt/lib/sanitizer_common/sanitizer_allocator_combined.h
+++ compiler-rt/lib/sanitizer_common/sanitizer_allocator_combined.h
@@ -34,15 +34,15 @@
"SecondaryAllocator is using wrong AddressSpaceView");
void InitLinkerInitialized(s32 release_to_os_interval_ms) {
+ stats_.InitLinkerInitialized();
primary_.Init(release_to_os_interval_ms);
secondary_.InitLinkerInitialized();
- stats_.InitLinkerInitialized();
}
void Init(s32 release_to_os_interval_ms) {
+ stats_.Init();
primary_.Init(release_to_os_interval_ms);
secondary_.Init();
- stats_.Init();
}
void *Allocate(AllocatorCache *cache, uptr size, uptr alignment) {
Index: compiler-rt/lib/hwasan/hwasan_allocator.h
===================================================================
--- compiler-rt/lib/hwasan/hwasan_allocator.h
+++ compiler-rt/lib/hwasan/hwasan_allocator.h
@@ -45,28 +45,22 @@
};
static const uptr kMaxAllowedMallocSize = 2UL << 30; // 2G
-static const uptr kRegionSizeLog = 20;
-static const uptr kNumRegions = SANITIZER_MMAP_RANGE_SIZE >> kRegionSizeLog;
-typedef TwoLevelByteMap<(kNumRegions >> 12), 1 << 12> ByteMap;
-struct AP32 {
- static const uptr kSpaceBeg = 0;
- static const u64 kSpaceSize = SANITIZER_MMAP_RANGE_SIZE;
+struct AP64 {
+ static const uptr kSpaceBeg = ~0ULL;
+ static const uptr kSpaceSize = 0x2000000000ULL;
static const uptr kMetadataSize = sizeof(Metadata);
- typedef __sanitizer::CompactSizeClassMap SizeClassMap;
- static const uptr kRegionSizeLog = __hwasan::kRegionSizeLog;
+ typedef __sanitizer::VeryDenseSizeClassMap SizeClassMap;
using AddressSpaceView = LocalAddressSpaceView;
- using ByteMap = __hwasan::ByteMap;
typedef HwasanMapUnmapCallback MapUnmapCallback;
static const uptr kFlags = 0;
};
-typedef SizeClassAllocator32<AP32> PrimaryAllocator;
+typedef SizeClassAllocator64<AP64> PrimaryAllocator;
typedef SizeClassAllocatorLocalCache<PrimaryAllocator> AllocatorCache;
typedef LargeMmapAllocator<HwasanMapUnmapCallback> SecondaryAllocator;
typedef CombinedAllocator<PrimaryAllocator, AllocatorCache,
SecondaryAllocator> Allocator;
-
void AllocatorSwallowThreadLocalCache(AllocatorCache *cache);
class HwasanChunkView {
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D56239.180158.patch
Type: text/x-patch
Size: 4464 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20190103/394f1099/attachment.bin>
More information about the llvm-commits
mailing list