summaryrefslogtreecommitdiff
path: root/test/sanitizer_common
diff options
context:
space:
mode:
authorAlex Shlyapnikov <alekseys@google.com>2017-03-20 21:03:28 +0000
committerAlex Shlyapnikov <alekseys@google.com>2017-03-20 21:03:28 +0000
commit2435d1fad8853b2beea8b8eae0fa6c52feda56c3 (patch)
treec2b1be03cddb178495f1b6ea6ee0470b30d6b823 /test/sanitizer_common
parentdc8b945decb8d19208975f9c90c0037cbb408d80 (diff)
Bypass potential libc's sysconf wrappers for sysconf(_SC_PAGESIZE) call
Summary: sysconf(_SC_PAGESIZE) is called very early, during sanitizer init and any instrumented code (a wrapper/interceptor will likely be instrumented) calling back to sanitizer before init is done will most surely crash. Reviewers: eugenis Subscribers: llvm-commits, kubamracek Differential Revision: https://reviews.llvm.org/D31092 git-svn-id: https://llvm.org/svn/llvm-project/compiler-rt/trunk@298305 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'test/sanitizer_common')
-rw-r--r--test/sanitizer_common/TestCases/Linux/sysconf_interceptor_bypass_test.cc21
1 files changed, 21 insertions, 0 deletions
diff --git a/test/sanitizer_common/TestCases/Linux/sysconf_interceptor_bypass_test.cc b/test/sanitizer_common/TestCases/Linux/sysconf_interceptor_bypass_test.cc
new file mode 100644
index 000000000..97b6132e2
--- /dev/null
+++ b/test/sanitizer_common/TestCases/Linux/sysconf_interceptor_bypass_test.cc
@@ -0,0 +1,21 @@
+// RUN: %clangxx -O2 %s -o %t && %run %t 2>&1 | FileCheck %s
+
+#include <stdio.h>
+
+extern "C" long sysconf(int name) {
+ fprintf(stderr, "sysconf wrapper called\n");
+ return 0;
+}
+
+int main() {
+ // All we need to check is that the sysconf() interceptor defined above was
+ // not called. Should it get called, it will crash right there, any
+ // instrumented code executed before sanitizer init is finished will crash
+ // accessing non-initialized sanitizer internals. Even if it will not crash
+ // in some configuration, it should never be called anyway.
+ fprintf(stderr, "Passed\n");
+ // CHECK-NOT: sysconf wrapper called
+ // CHECK: Passed
+ // CHECK-NOT: sysconf wrapper called
+ return 0;
+}