[compiler-rt] 6f66b12 - [sanitizer-common] Expand testing for 56-bit address spaces
Thurston Dang via llvm-commits
llvm-commits at lists.llvm.org
Tue Apr 25 20:04:17 PDT 2023
Author: Thurston Dang
Date: 2023-04-26T02:48:56Z
New Revision: 6f66b12528cc27031b5cfa1f49bf44f99755731c
URL: https://github.com/llvm/llvm-project/commit/6f66b12528cc27031b5cfa1f49bf44f99755731c
DIFF: https://github.com/llvm/llvm-project/commit/6f66b12528cc27031b5cfa1f49bf44f99755731c.diff
LOG: [sanitizer-common] Expand testing for 56-bit address spaces
This patch adds mmap_56bit_test.c, which attempts to deliberately
mmap above 2^47. This currently exposes a failure on ASan on
systems with 56-bit user address spaces, because it allows an mmap
above 2^47 but the shadow mapping is only set up for a 2^47 user address
space.
Additionally, this patch moves pie_no_aslr from the tsan tests into
sanitizer-common, for greater test coverage.
Differential Revision: https://reviews.llvm.org/D149176
Added:
compiler-rt/test/sanitizer_common/TestCases/Linux/mmap_56bit_test.c
compiler-rt/test/sanitizer_common/TestCases/Linux/pie_no_aslr.cpp
Modified:
Removed:
compiler-rt/test/tsan/Linux/pie_no_aslr.cpp
################################################################################
diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/mmap_56bit_test.c b/compiler-rt/test/sanitizer_common/TestCases/Linux/mmap_56bit_test.c
new file mode 100644
index 0000000000000..b14ac7bcf1924
--- /dev/null
+++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/mmap_56bit_test.c
@@ -0,0 +1,30 @@
+// RUN: %clangxx %s -pie -fPIE -o %t && %run %t
+// REQUIRES: x86_64-target-arch
+
+#include <assert.h>
+#include <stdio.h>
+#include <sys/mman.h>
+
+int main() {
+ for (int j = 0; j < 1024; j++) {
+ // Try 1TB offsets. This attempts to find memory addresses where the
+ // shadow mappings - which assume a 47-bit address space - are invalid.
+ unsigned long long target = (1ULL << 56) - (2 * 4096) - (j * (1ULL << 40));
+
+ // Since we don't use MAP_FIXED, mmap might return an address that is
+ // lower in the address space (due to sanitizer and/or kernel limits).
+ // That is fine - if the app is also restricted from making high
+ // allocations, then they are safe.
+ char* ptr = (char*) mmap ((void*) target, 4096, PROT_READ | PROT_WRITE,
+ MAP_PRIVATE | MAP_ANONYMOUS, -1, 0);
+ printf ("Allocated at %p\n", ptr);
+
+ assert (ptr != MAP_FAILED);
+ for (int i = 0; i < 100; i++) {
+ ptr [i] = 0;
+ }
+ munmap (ptr, 4096);
+ }
+
+ return 0;
+}
diff --git a/compiler-rt/test/sanitizer_common/TestCases/Linux/pie_no_aslr.cpp b/compiler-rt/test/sanitizer_common/TestCases/Linux/pie_no_aslr.cpp
new file mode 100644
index 0000000000000..246794bca7399
--- /dev/null
+++ b/compiler-rt/test/sanitizer_common/TestCases/Linux/pie_no_aslr.cpp
@@ -0,0 +1,4 @@
+// RUN: %clangxx %s -pie -fPIE -o %t && %run setarch x86_64 -R %t
+// REQUIRES: x86_64-target-arch
+
+int main() { return 0; }
diff --git a/compiler-rt/test/tsan/Linux/pie_no_aslr.cpp b/compiler-rt/test/tsan/Linux/pie_no_aslr.cpp
deleted file mode 100644
index b99342da06bb7..0000000000000
--- a/compiler-rt/test/tsan/Linux/pie_no_aslr.cpp
+++ /dev/null
@@ -1,6 +0,0 @@
-// RUN: %clang_tsan %s -pie -fPIE -o %t && %run setarch x86_64 -R %t
-// REQUIRES: x86_64-target-arch
-
-int main() {
- return 0;
-}
More information about the llvm-commits
mailing list