summaryrefslogtreecommitdiff
path: root/lib/msan
diff options
context:
space:
mode:
authorNaomi Musgrave <nmusgrave@google.com>2015-07-17 23:28:00 +0000
committerNaomi Musgrave <nmusgrave@google.com>2015-07-17 23:28:00 +0000
commit7e3eee503762f7c1654d8795e452b5a2c88df1d2 (patch)
tree0580c819de18ce4c5811eadc2392c5de97d925ee /lib/msan
parent0015659260c9f12c7b1e96916b31e8ebc6494552 (diff)
re-added changes due to svn config setting issues
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@242589 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/msan')
-rw-r--r--lib/msan/msan.cc2
-rw-r--r--lib/msan/msan_flags.inc1
-rw-r--r--lib/msan/msan_interceptors.cc8
-rw-r--r--lib/msan/msan_interface_internal.h5
4 files changed, 15 insertions, 1 deletions
diff --git a/lib/msan/msan.cc b/lib/msan/msan.cc
index 163d59dab..d324dcfee 100644
--- a/lib/msan/msan.cc
+++ b/lib/msan/msan.cc
@@ -511,7 +511,7 @@ void __msan_partial_poison(const void* data, void* shadow, uptr size) {
internal_memcpy((void*)MEM_TO_SHADOW((uptr)data), shadow, size);
}
-void __msan_load_unpoisoned(void *src, uptr size, void *dst) {
+void __msan_load_unpoisoned(const void *src, uptr size, void *dst) {
internal_memcpy(dst, src, size);
__msan_unpoison(dst, size);
}
diff --git a/lib/msan/msan_flags.inc b/lib/msan/msan_flags.inc
index cb58ffc4a..3729b3fc4 100644
--- a/lib/msan/msan_flags.inc
+++ b/lib/msan/msan_flags.inc
@@ -24,6 +24,7 @@ MSAN_FLAG(bool, poison_heap_with_zeroes, false, "")
MSAN_FLAG(bool, poison_stack_with_zeroes, false, "")
MSAN_FLAG(bool, poison_in_malloc, true, "")
MSAN_FLAG(bool, poison_in_free, true, "")
+MSAN_FLAG(bool, poison_in_dtor, false, "")
MSAN_FLAG(bool, report_umrs, true, "")
MSAN_FLAG(bool, wrap_signals, true, "")
MSAN_FLAG(bool, print_stats, false, "")
diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc
index 6d5a056a3..972a9d3bc 100644
--- a/lib/msan/msan_interceptors.cc
+++ b/lib/msan/msan_interceptors.cc
@@ -1005,6 +1005,14 @@ void __msan_allocated_memory(const void *data, uptr size) {
}
}
+void __sanitizer_dtor_callback(const void *data, uptr size) {
+ GET_MALLOC_STACK_TRACE;
+ if (flags()->poison_in_dtor) {
+ stack.tag = STACK_TRACE_TAG_POISON;
+ PoisonMemory(data, size, &stack);
+ }
+}
+
INTERCEPTOR(void *, mmap, void *addr, SIZE_T length, int prot, int flags,
int fd, OFF_T offset) {
if (msan_init_is_running)
diff --git a/lib/msan/msan_interface_internal.h b/lib/msan/msan_interface_internal.h
index f4d37d96c..3b0e30c56 100644
--- a/lib/msan/msan_interface_internal.h
+++ b/lib/msan/msan_interface_internal.h
@@ -140,6 +140,11 @@ void __msan_partial_poison(const void* data, void* shadow, uptr size);
SANITIZER_INTERFACE_ATTRIBUTE
void __msan_allocated_memory(const void* data, uptr size);
+// Tell MSan about newly destroyed memory. Memory will be marked
+// uninitialized.
+SANITIZER_INTERFACE_ATTRIBUTE
+void __sanitizer_dtor_callback(const void* data, uptr size);
+
SANITIZER_INTERFACE_ATTRIBUTE
u16 __sanitizer_unaligned_load16(const uu16 *p);