diff options
author | Alex Shlyapnikov <alekseys@google.com> | 2017-03-20 21:03:28 +0000 |
---|---|---|
committer | Alex Shlyapnikov <alekseys@google.com> | 2017-03-20 21:03:28 +0000 |
commit | 2435d1fad8853b2beea8b8eae0fa6c52feda56c3 (patch) | |
tree | c2b1be03cddb178495f1b6ea6ee0470b30d6b823 /test/sanitizer_common | |
parent | dc8b945decb8d19208975f9c90c0037cbb408d80 (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.cc | 21 |
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; +} |