[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