[compiler-rt] r298305 - Bypass potential libc's sysconf wrappers for sysconf(_SC_PAGESIZE) call
Vitaly Buka via llvm-commits
llvm-commits at lists.llvm.org
Tue Mar 21 00:09:29 PDT 2017
Reverted with r298343 as almost every step was red on bot.
On Mon, Mar 20, 2017 at 11:26 PM Vitaly Buka <vitalybuka at google.com> wrote:
> Alex, could you please take a look?
>
> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/1128/steps/check-sanitizer%20in%20gcc%20build/logs/stdio
>
> [ 13%] Building CXX object lib/DebugInfo/Symbolize/CMakeFiles/LLVMSymbolize.dir/SymbolizableObjectFile.cpp.o
> Scanning dependencies of target LLVMDebugInfoPDB
> /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc:81:22: fatal error: sys/auxv.h: No such file or directory
> #include <sys/auxv.h>
> ^
> compilation terminated.
> make[3]: *** [projects/compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.i386.dir/sanitizer_linux.cc.o] Error 1
> [ 13%] Building CXX object lib/DebugInfo/DWARF/CMakeFiles/LLVMDebugInfoDWARF.dir/DWARFDebugAranges.cpp.o
> /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/lib/sanitizer_common/sanitizer_linux.cc:81:22: fatal error: sys/auxv.h: No such file or directory
> #include <sys/auxv.h>
> ^
> compilation terminated.
> [ 13%] Building CXX object lib/DebugInfo/Symbolize/CMakeFiles/LLVMSymbolize.dir/Symbolize.cpp.o
> make[3]: *** [projects/compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.x86_64.dir/sanitizer_linux.cc.o] Error 1
> make[2]: *** [projects/compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.x86_64.dir/all] Error 2
> make[2]: *** Waiting for unfinished jobs....
> make[2]: *** [projects/compiler-rt/lib/sanitizer_common/CMakeFiles/RTSanitizerCommon.i386.dir/all] Error 2
> [ 13%] Building CXX object lib/DebugInfo/DWARF/CMakeFiles/LLVMDebugInfoDWARF.dir/DWARFDebugInfoEntry.cpp.o
> [ 13%] Building CXX object lib/DebugInfo/DWARF/CMakeFiles/LLVMDebugInfoDWARF.dir/DWARFDebugLine.cpp.o
> [ 13%] Building CXX object lib/DebugInfo/PDB/CMakeFiles/LLVMDebugInfoPDB.dir/PDBContext.cpp.o
>
>
> On Mon, Mar 20, 2017 at 2:15 PM Alex Shlyapnikov via llvm-commits <
> llvm-commits at lists.llvm.org> wrote:
>
>> Author: alekseyshl
>> Date: Mon Mar 20 16:03:28 2017
>> New Revision: 298305
>>
>> URL: http://llvm.org/viewvc/llvm-project?rev=298305&view=rev
>> Log:
>> 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
>>
>> Added:
>>
>> compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/sysconf_interceptor_bypass_test.cc
>> Modified:
>> compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc
>>
>> Modified: compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc?rev=298305&r1=298304&r2=298305&view=diff
>>
>> ==============================================================================
>> --- compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc (original)
>> +++ compiler-rt/trunk/lib/sanitizer_common/sanitizer_linux.cc Mon Mar 20
>> 16:03:28 2017
>> @@ -78,6 +78,7 @@ extern char **environ; // provided by c
>> #endif
>>
>> #if SANITIZER_LINUX
>> +#include <sys/auxv.h>
>> // <linux/time.h>
>> struct kernel_timeval {
>> long tv_sec;
>> @@ -805,6 +806,8 @@ uptr GetPageSize() {
>> return 4096;
>> #elif SANITIZER_LINUX && (defined(__x86_64__) || defined(__i386__))
>> return EXEC_PAGESIZE;
>> +#elif SANITIZER_LINUX
>> + return getauxval(AT_PAGESZ);
>> #else
>> return sysconf(_SC_PAGESIZE); // EXEC_PAGESIZE may not be trustworthy.
>> #endif
>>
>> Added:
>> compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/sysconf_interceptor_bypass_test.cc
>> URL:
>> http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/sysconf_interceptor_bypass_test.cc?rev=298305&view=auto
>>
>> ==============================================================================
>> ---
>> compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/sysconf_interceptor_bypass_test.cc
>> (added)
>> +++
>> compiler-rt/trunk/test/sanitizer_common/TestCases/Linux/sysconf_interceptor_bypass_test.cc
>> Mon Mar 20 16:03:28 2017
>> @@ -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;
>> +}
>>
>>
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20170321/82555bc8/attachment.html>
More information about the llvm-commits
mailing list