summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorWalter Lee <waltl@google.com>2017-11-16 17:03:25 +0000
committerWalter Lee <waltl@google.com>2017-11-16 17:03:25 +0000
commit871a521d0c3232a89e9f33e6d55f84154bbf9d39 (patch)
tree1ee32e34a843ea436058d4798a892886c32d6523 /lib
parent8edbfabe4d65e749511f8afbc80558059cf34dd7 (diff)
[asan] Ensure that the minimum redzone is at least SHADOW_GRANULARITY
This is required by the Asan run-time. Differential Revision: https://reviews.llvm.org/D39472 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@318422 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r--lib/asan/asan_activation.cc7
-rw-r--r--lib/asan/asan_flags.cc3
2 files changed, 8 insertions, 2 deletions
diff --git a/lib/asan/asan_activation.cc b/lib/asan/asan_activation.cc
index 66eba9ce2..d642be934 100644
--- a/lib/asan/asan_activation.cc
+++ b/lib/asan/asan_activation.cc
@@ -16,8 +16,10 @@
#include "asan_allocator.h"
#include "asan_flags.h"
#include "asan_internal.h"
+#include "asan_mapping.h"
#include "asan_poisoning.h"
#include "asan_stack.h"
+#include "sanitizer_common/sanitizer_common.h"
#include "sanitizer_common/sanitizer_flags.h"
namespace __asan {
@@ -110,8 +112,9 @@ void AsanDeactivate() {
AllocatorOptions disabled = asan_deactivated_flags.allocator_options;
disabled.quarantine_size_mb = 0;
disabled.thread_local_quarantine_size_kb = 0;
- disabled.min_redzone = 16; // Redzone must be at least 16 bytes long.
- disabled.max_redzone = 16;
+ // Redzone must be at least Max(16, granularity) bytes long.
+ disabled.min_redzone = Max(16, (int)SHADOW_GRANULARITY);
+ disabled.max_redzone = disabled.min_redzone;
disabled.alloc_dealloc_mismatch = false;
disabled.may_return_null = true;
ReInitializeAllocator(disabled);
diff --git a/lib/asan/asan_flags.cc b/lib/asan/asan_flags.cc
index d3efadc54..562168e6d 100644
--- a/lib/asan/asan_flags.cc
+++ b/lib/asan/asan_flags.cc
@@ -148,6 +148,9 @@ void InitializeFlags() {
SanitizerToolName);
Die();
}
+ // Ensure that redzone is at least SHADOW_GRANULARITY.
+ if (f->redzone < (int)SHADOW_GRANULARITY)
+ f->redzone = SHADOW_GRANULARITY;
// Make "strict_init_order" imply "check_initialization_order".
// TODO(samsonov): Use a single runtime flag for an init-order checker.
if (f->strict_init_order) {