diff options
author | Kostya Kortchinsky <kostyak@google.com> | 2016-09-19 21:11:55 +0000 |
---|---|---|
committer | Kostya Kortchinsky <kostyak@google.com> | 2016-09-19 21:11:55 +0000 |
commit | 42cfe466e6e4fc0580d7945cc5c346318694224f (patch) | |
tree | 37b6fd0ac6a172fd5ceaa9e9b6bd31715c1f2079 /lib/scudo/scudo_allocator.cpp | |
parent | 96f3c80a994d3fe69f79e398b736a46801784524 (diff) |
[scudo] Modify Scudo to use its own Secondary Allocator
Summary:
The Sanitizer Secondary Allocator was not entirely ideal was Scudo for several
reasons: decent amount of unneeded code, redundant checks already performed by
the front end, unneeded data structures, difficulty to properly protect the
secondary chunks header.
Given that the second allocator is pretty straight forward, Scudo will use its
own, trimming all the unneeded code off of the Sanitizer one. A significant
difference in terms of security is that now each secondary chunk is preceded
and followed by a guard page, thus mitigating overflows into and from the
chunk.
A test was added as well to illustrate the overflow & underflow situations
into the guard pages.
Reviewers: kcc
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D24737
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@281938 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/scudo/scudo_allocator.cpp')
-rw-r--r-- | lib/scudo/scudo_allocator.cpp | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/lib/scudo/scudo_allocator.cpp b/lib/scudo/scudo_allocator.cpp index d5284a53e..0ae21c351 100644 --- a/lib/scudo/scudo_allocator.cpp +++ b/lib/scudo/scudo_allocator.cpp @@ -16,6 +16,7 @@ #include "scudo_allocator.h" #include "scudo_utils.h" +#include "scudo_allocator_secondary.h" #include "sanitizer_common/sanitizer_allocator_interface.h" #include "sanitizer_common/sanitizer_quarantine.h" @@ -44,7 +45,7 @@ struct AP { typedef SizeClassAllocator64<AP> PrimaryAllocator; typedef SizeClassAllocatorLocalCache<PrimaryAllocator> AllocatorCache; -typedef LargeMmapAllocator<> SecondaryAllocator; +typedef ScudoLargeMmapAllocator SecondaryAllocator; typedef CombinedAllocator<PrimaryAllocator, AllocatorCache, SecondaryAllocator> ScudoAllocator; @@ -348,7 +349,7 @@ struct Allocator { } else { SpinMutexLock l(&FallbackMutex); Ptr = BackendAllocator.Allocate(&FallbackAllocatorCache, NeededSize, - MinAlignment); + MinAlignment); } if (!Ptr) return BackendAllocator.ReturnNullOrDie(); |