diff options
Diffstat (limited to 'lib/sanitizer_common/tests/sanitizer_posix_test.cc')
-rw-r--r-- | lib/sanitizer_common/tests/sanitizer_posix_test.cc | 18 |
1 files changed, 18 insertions, 0 deletions
diff --git a/lib/sanitizer_common/tests/sanitizer_posix_test.cc b/lib/sanitizer_common/tests/sanitizer_posix_test.cc index 035899c83022..56ce416141fa 100644 --- a/lib/sanitizer_common/tests/sanitizer_posix_test.cc +++ b/lib/sanitizer_common/tests/sanitizer_posix_test.cc @@ -18,6 +18,7 @@ #include "gtest/gtest.h" #include <pthread.h> +#include <sys/mman.h> namespace __sanitizer { @@ -57,6 +58,23 @@ TEST(SanitizerCommon, PthreadDestructorIterations) { EXPECT_FALSE(destructor_executed); } +TEST(SanitizerCommon, IsAccessibleMemoryRange) { + const int page_size = GetPageSize(); + uptr mem = (uptr)mmap(0, 3 * page_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE | MAP_ANON, -1, 0); + // Protect the middle page. + mprotect((void *)(mem + page_size), page_size, PROT_NONE); + EXPECT_TRUE(IsAccessibleMemoryRange(mem, page_size - 1)); + EXPECT_TRUE(IsAccessibleMemoryRange(mem, page_size)); + EXPECT_FALSE(IsAccessibleMemoryRange(mem, page_size + 1)); + EXPECT_TRUE(IsAccessibleMemoryRange(mem + page_size - 1, 1)); + EXPECT_FALSE(IsAccessibleMemoryRange(mem + page_size - 1, 2)); + EXPECT_FALSE(IsAccessibleMemoryRange(mem + 2 * page_size - 1, 1)); + EXPECT_TRUE(IsAccessibleMemoryRange(mem + 2 * page_size, page_size)); + EXPECT_FALSE(IsAccessibleMemoryRange(mem, 3 * page_size)); + EXPECT_FALSE(IsAccessibleMemoryRange(0x0, 2)); +} + } // namespace __sanitizer #endif // SANITIZER_POSIX |