summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-04-23 13:27:36 +0000
committerEvgeniy Stepanov <eugeni.stepanov@gmail.com>2013-04-23 13:27:36 +0000
commitb6c8e47a72d526232f4d3e3b36232f30f8818733 (patch)
tree30b14e3b8481265d2c9b87f6d03a179add71582b
parentff7c14f911463db91b574533f62eb847a2e08b1c (diff)
downloadcompiler-rt-b6c8e47a72d526232f4d3e3b36232f30f8818733.tar.gz
[msan] Unpoison the result of posix_memalign.
git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@180101 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r--lib/msan/msan_interceptors.cc4
-rw-r--r--lib/msan/tests/msan_test.cc9
2 files changed, 12 insertions, 1 deletions
diff --git a/lib/msan/msan_interceptors.cc b/lib/msan/msan_interceptors.cc
index 279c51a1f..a94005069 100644
--- a/lib/msan/msan_interceptors.cc
+++ b/lib/msan/msan_interceptors.cc
@@ -114,8 +114,10 @@ INTERCEPTOR(void *, memset, void *s, int c, SIZE_T n) {
INTERCEPTOR(int, posix_memalign, void **memptr, SIZE_T alignment, SIZE_T size) {
GET_MALLOC_STACK_TRACE;
CHECK_EQ(alignment & (alignment - 1), 0);
- *memptr = MsanReallocate(&stack, 0, size, alignment, false);
CHECK_NE(memptr, 0);
+ *memptr = MsanReallocate(&stack, 0, size, alignment, false);
+ CHECK_NE(*memptr, 0);
+ __msan_unpoison(memptr, sizeof(*memptr));
return 0;
}
diff --git a/lib/msan/tests/msan_test.cc b/lib/msan/tests/msan_test.cc
index 50a57fbde..4a3b72bb7 100644
--- a/lib/msan/tests/msan_test.cc
+++ b/lib/msan/tests/msan_test.cc
@@ -1627,6 +1627,15 @@ TEST(MemorySanitizer, PreAllocatedStackThread) {
ASSERT_EQ(0, res);
}
+TEST(MemorySanitizer, posix_memalign) {
+ void *p;
+ EXPECT_POISONED(p);
+ int res = posix_memalign(&p, 4096, 13);
+ ASSERT_EQ(0, res);
+ EXPECT_NOT_POISONED(p);
+ free(p);
+}
+
TEST(MemorySanitizer, uname) {
struct utsname u;
int res = uname(&u);