[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