diff options
-rw-r--r-- | lib/msan/msan_interceptors.cc | 4 | ||||
-rw-r--r-- | lib/msan/tests/msan_test.cc | 9 |
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); |