diff options
author | Kostya Serebryany <kcc@google.com> | 2014-04-21 14:18:45 +0000 |
---|---|---|
committer | Kostya Serebryany <kcc@google.com> | 2014-04-21 14:18:45 +0000 |
commit | 465df6b8b0f8473c833ae9d69f2138b03bba1376 (patch) | |
tree | 6a9d8b7961bcc2c5b40ea646012120091c6b2744 /lib/asan | |
parent | 0d777c44ddcc34eac444a1bc3f9707e162910261 (diff) |
[asan] add a run-time flag detect_container_overflow=true/false
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@206753 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/asan')
-rw-r--r-- | lib/asan/asan_flags.h | 1 | ||||
-rw-r--r-- | lib/asan/asan_poisoning.cc | 1 | ||||
-rw-r--r-- | lib/asan/asan_report.cc | 2 | ||||
-rw-r--r-- | lib/asan/asan_rtl.cc | 6 |
4 files changed, 9 insertions, 1 deletions
diff --git a/lib/asan/asan_flags.h b/lib/asan/asan_flags.h index 523302b96..7dc781581 100644 --- a/lib/asan/asan_flags.h +++ b/lib/asan/asan_flags.h @@ -63,6 +63,7 @@ struct Flags { bool strict_init_order; bool start_deactivated; int detect_invalid_pointer_pairs; + bool detect_container_overflow; }; extern Flags asan_flags_dont_use_directly; diff --git a/lib/asan/asan_poisoning.cc b/lib/asan/asan_poisoning.cc index f75ac0a4e..a545769bd 100644 --- a/lib/asan/asan_poisoning.cc +++ b/lib/asan/asan_poisoning.cc @@ -266,6 +266,7 @@ void __sanitizer_annotate_contiguous_container(const void *beg_p, const void *end_p, const void *old_mid_p, const void *new_mid_p) { + if (!flags()->detect_container_overflow) return; VPrintf(2, "contiguous_container: %p %p %p %p\n", beg_p, end_p, old_mid_p, new_mid_p); uptr beg = reinterpret_cast<uptr>(beg_p); diff --git a/lib/asan/asan_report.cc b/lib/asan/asan_report.cc index 9d1742202..bece6eab3 100644 --- a/lib/asan/asan_report.cc +++ b/lib/asan/asan_report.cc @@ -141,7 +141,7 @@ static void PrintLegend(InternalScopedString *str) { kAsanInitializationOrderMagic); PrintShadowByte(str, " Poisoned by user: ", kAsanUserPoisonedMemoryMagic); - PrintShadowByte(str, " Contiguous container OOB:", + PrintShadowByte(str, " Container overflow: ", kAsanContiguousContainerOOBMagic); PrintShadowByte(str, " ASan internal: ", kAsanInternalHeapMagic); } diff --git a/lib/asan/asan_rtl.cc b/lib/asan/asan_rtl.cc index d608dd711..4b11f2a51 100644 --- a/lib/asan/asan_rtl.cc +++ b/lib/asan/asan_rtl.cc @@ -220,6 +220,11 @@ static void ParseFlagsFromString(Flags *f, const char *str) { "If non-zero, try to detect operations like <, <=, >, >= and - on " "invalid pointer pairs (e.g. when pointers belong to different objects). " "The bigger the value the harder we try."); + + ParseFlag(str, &f->detect_container_overflow, + "detect_container_overflow", + "If true, honor the container overflow annotations. " + "See https://code.google.com/p/address-sanitizer/wiki/ContainerOverflow"); } void InitializeFlags(Flags *f, const char *env) { @@ -267,6 +272,7 @@ void InitializeFlags(Flags *f, const char *env) { f->strict_init_order = false; f->start_deactivated = false; f->detect_invalid_pointer_pairs = 0; + f->detect_container_overflow = true; // Override from compile definition. ParseFlagsFromString(f, MaybeUseAsanDefaultOptionsCompileDefiniton()); |