[compiler-rt] r273464 - [asan] Add a test case for global registration

Ryan Govostes via llvm-commits llvm-commits at lists.llvm.org
Sun Jun 26 23:52:10 PDT 2016


The test should finally be passing on all bots as of r273844.

> On Jun 24, 2016, at 11:54, Mike Aizatsky <aizatsky at google.com> wrote:
> 
> Here's a fresher failure:
> 
> http://lab.llvm.org:8011/builders/sanitizer-ppc64le-linux/builds/1521/steps/run%20asan-dynamic%20tests/logs/stdio <http://lab.llvm.org:8011/builders/sanitizer-ppc64le-linux/builds/1521/steps/run%20asan-dynamic%20tests/logs/stdio>
> 
> FAIL: AddressSanitizer-powerpc64le-linux-dynamic :: TestCases/Posix/global-registration.c (291 of 556)
> ******************** TEST 'AddressSanitizer-powerpc64le-linux-dynamic :: TestCases/Posix/global-registration.c' FAILED ********************
> Script:
> --
> /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/./bin/clang -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -gline-tables-only -m64 -shared-libasan -c -o /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/tools/clang/runtime/compiler-rt-bins/test/asan/POWERPC64LELinuxDynamicConfig/TestCases/Posix/Output/global-registration.c.tmp-one.o -DMAIN_FILE /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
> /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/./bin/clang -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -gline-tables-only -m64 -shared-libasan -c -o /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/tools/clang/runtime/compiler-rt-bins/test/asan/POWERPC64LELinuxDynamicConfig/TestCases/Posix/Output/global-registration.c.tmp-two.o -DSECONDARY_FILE /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
> /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/./bin/clang -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -gline-tables-only -m64 -shared-libasan -o /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/tools/clang/runtime/compiler-rt-bins/test/asan/POWERPC64LELinuxDynamicConfig/TestCases/Posix/Output/global-registration.c.tmp /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/tools/clang/runtime/compiler-rt-bins/test/asan/POWERPC64LELinuxDynamicConfig/TestCases/Posix/Output/global-registration.c.tmp-one.o /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/tools/clang/runtime/compiler-rt-bins/test/asan/POWERPC64LELinuxDynamicConfig/TestCases/Posix/Output/global-registration.c.tmp-two.o
> /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/./bin/clang -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -gline-tables-only -m64 -shared-libasan -o /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/tools/clang/runtime/compiler-rt-bins/test/asan/POWERPC64LELinuxDynamicConfig/TestCases/Posix/Output/global-registration.c.tmp-dynamic.so <http://global-registration.c.tmp-dynamic.so/> -shared -fPIC -ldl -DSHARED_LIBRARY_FILE /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
> not  /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/tools/clang/runtime/compiler-rt-bins/test/asan/POWERPC64LELinuxDynamicConfig/TestCases/Posix/Output/global-registration.c.tmp 1 2>&1 | FileCheck --check-prefix ASAN-CHECK-1 /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
> not  /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/tools/clang/runtime/compiler-rt-bins/test/asan/POWERPC64LELinuxDynamicConfig/TestCases/Posix/Output/global-registration.c.tmp 2 2>&1 | FileCheck --check-prefix ASAN-CHECK-2 /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
> not  /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/tools/clang/runtime/compiler-rt-bins/test/asan/POWERPC64LELinuxDynamicConfig/TestCases/Posix/Output/global-registration.c.tmp 3 2>&1 | FileCheck --check-prefix ASAN-CHECK-3 /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
> --
> Exit Code: 1
> 
> Command Output (stderr):
> --
> /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c:35:5: warning: implicit declaration of function 'asprintf' is invalid in C99 [-Wimplicit-function-declaration]
>     asprintf(&libpath, "%s-dynamic.so", argv[0]);
>     ^
> 1 warning generated.
> /usr/bin/ld: /home/buildbots/ppc64le-sanitizer/sanitizer-ppc64le/build/llvm_build64/tools/clang/runtime/compiler-rt-bins/test/asan/POWERPC64LELinuxDynamicConfig/TestCases/Posix/Output/global-registration.c.tmp-one.o: undefined reference to symbol 'dlsym@@GLIBC_2.17'
> /lib64/libdl.so.2: error adding symbols: DSO missing from command line
> clang-3.9: error: linker command failed with exit code 1 (use -v to see invocation)
> 
> 
> On Thu, Jun 23, 2016 at 4:33 PM Ryan Govostes <rzg at apple.com <mailto:rzg at apple.com>> wrote:
> The error makes it look like the test does not generate an ASAN violation when we dlopen() a shared library and then perform a global buffer overflow on a symbol within that library.
> not  /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm/test/asan/ARMAndroidConfig/TestCases/Posix/Output/global-registration.c.tmp 3 2>&1 | FileCheck --check-prefix ASAN-CHECK-3 /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
> I'm assuming the dlopen or dlsym call fails. Are those restricted on Android? I can split that off into a separate test and make it XFAIL if so. Otherwise if there is something else I need to be aware of with Android tests to make this work, please let me know.
> 
> I've committed a version that logs output if dl* fails, r273629.
> 
> Ryan
> 
>> On Jun 23, 2016, at 15:51, Mike Aizatsky <aizatsky at google.com <mailto:aizatsky at google.com>> wrote:
>> 
>> Ryan,
>> 
>> This test breaks the bot:
>> http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/24502 <http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux/builds/24502>
>> 
>> @@@BUILD_STEP run asan lit tests [arm/hammerhead-userdebug/LMY48T]@@@
>> + echo @@@BUILD_STEP run asan lit tests '[arm/hammerhead-userdebug/LMY48T]@@@'
>> + cd /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm
>> + ninja check-asan
>> [1/1] Running the AddressSanitizer tests
>> -- Testing: 364 tests, 16 threads --
>> Testing: 0 .. 10.. 20.. 
>> FAIL: AddressSanitizer-arm-android :: TestCases/Posix/global-registration.c (112 of 364)
>> ******************** TEST 'AddressSanitizer-arm-android :: TestCases/Posix/global-registration.c' FAILED ********************
>> Script:
>> --
>> /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/android_commands/android_compile.py  /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm_build64/bin/clang -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -gline-tables-only --target=armv7-linux-androideabi --sysroot=/mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/../../../android-ndk/standalone-arm/sysroot -B/mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/../../../android-ndk/standalone-arm -lm -shared-libasan -c -o /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm/test/asan/ARMAndroidConfig/TestCases/Posix/Output/global-registration.c.tmp-one.o -DDYNAMICLIB=\"/mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm/test/asan/ARMAndroidConfig/TestCases/Posix/Output/global-registration.c.tmp-dynamic.so <http://global-registration.c.tmp-dynamic.so/>\" -DMAIN_FILE /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
>> /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/android_commands/android_compile.py  /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm_build64/bin/clang -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -gline-tables-only --target=armv7-linux-androideabi --sysroot=/mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/../../../android-ndk/standalone-arm/sysroot -B/mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/../../../android-ndk/standalone-arm -lm -shared-libasan -c -o /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm/test/asan/ARMAndroidConfig/TestCases/Posix/Output/global-registration.c.tmp-two.o -DSECONDARY_FILE /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
>> /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/android_commands/android_compile.py  /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm_build64/bin/clang -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -gline-tables-only --target=armv7-linux-androideabi --sysroot=/mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/../../../android-ndk/standalone-arm/sysroot -B/mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/../../../android-ndk/standalone-arm -lm -shared-libasan -o /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm/test/asan/ARMAndroidConfig/TestCases/Posix/Output/global-registration.c.tmp /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm/test/asan/ARMAndroidConfig/TestCases/Posix/Output/global-registration.c.tmp-one.o /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm/test/asan/ARMAndroidConfig/TestCases/Posix/Output/global-registration.c.tmp-two.o
>> /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/android_commands/android_compile.py  /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm_build64/bin/clang -fsanitize=address -mno-omit-leaf-frame-pointer -fno-omit-frame-pointer -fno-optimize-sibling-calls -gline-tables-only --target=armv7-linux-androideabi --sysroot=/mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/../../../android-ndk/standalone-arm/sysroot -B/mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/../../../android-ndk/standalone-arm -lm -shared-libasan -shared -fPIC -o /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm/test/asan/ARMAndroidConfig/TestCases/Posix/Output/global-registration.c.tmp-dynamic.so <http://global-registration.c.tmp-dynamic.so/> -DSHARED_LIBRARY_FILE /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
>> not  /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm/test/asan/ARMAndroidConfig/TestCases/Posix/Output/global-registration.c.tmp 1 2>&1 | FileCheck --check-prefix ASAN-CHECK-1 /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
>> not  /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm/test/asan/ARMAndroidConfig/TestCases/Posix/Output/global-registration.c.tmp 2 2>&1 | FileCheck --check-prefix ASAN-CHECK-2 /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
>> not  /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm/test/asan/ARMAndroidConfig/TestCases/Posix/Output/global-registration.c.tmp 3 2>&1 | FileCheck --check-prefix ASAN-CHECK-3 /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
>> --
>> Exit Code: 2
>> 
>> Command Output (stderr):
>> --
>> clang-3.9: warning: -lm: 'linker' input unused
>> clang-3.9: warning: -lm: 'linker' input unused
>> FileCheck error: '-' is empty.
>> FileCheck command line:  FileCheck --check-prefix ASAN-CHECK-3 /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/projects/compiler-rt/test/asan/TestCases/Posix/global-registration.c
>> 
>> --
>> 
>> ********************
>> Testing: 0 .. 10.. 20.. 30.. 40.. 50.. 60.. 70.. 80.. 90.. 
>> Testing Time: 537.93s
>> ********************
>> Failing Tests (1):
>>     AddressSanitizer-arm-android :: TestCases/Posix/global-registration.c
>> 
>>   Expected Passes    : 165
>>   Expected Failures  : 40
>>   Unsupported Tests  : 158
>>   Unexpected Failures: 1
>> FAILED: cd /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm/test/asan && /usr/bin/python2.7 /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/llvm/utils/lit/lit.py -sv /mnt/b/sanitizer-buildbot1/sanitizer-x86_64-linux/build/compiler_rt_build_android_arm/test/asan/ARMAndroidConfig
>> ninja: build stopped: subcommand failed.
>> @@@STEP_FAILURE@@@
>> + echo @@@STEP_FAILURE@@@
>> + echo @@@BUILD_STEP run sanitizer_common tests '[arm/hammerhead-userdebug/LMY48T]@@@'
>> 
>> 
>> --------------------------------------------------------------------------------
>> started: Thu Jun 23 13:34:17 2016
>> ended: Thu Jun 23 15:20:10 2016
>> duration: 1 hrs, 45 mins, 53 secs
>> 
>> On Wed, Jun 22, 2016 at 1:06 PM Ryan Govostes via llvm-commits <llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>> wrote:
>> Author: rgov
>> Date: Wed Jun 22 14:59:10 2016
>> New Revision: 273464
>> 
>> URL: http://llvm.org/viewvc/llvm-project?rev=273464&view=rev <http://llvm.org/viewvc/llvm-project?rev=273464&view=rev>
>> Log:
>> [asan] Add a test case for global registration
>> 
>> This test case checks that globals from all object files are being registered
>> after they've been linked together. It also checks that globals from libraries
>> loaded at runtime are registered.
>> 
>> 
>> Added:
>>     compiler-rt/trunk/test/asan/TestCases/Posix/global-registration.c
>> 
>> Added: compiler-rt/trunk/test/asan/TestCases/Posix/global-registration.c
>> URL: http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Posix/global-registration.c?rev=273464&view=auto <http://llvm.org/viewvc/llvm-project/compiler-rt/trunk/test/asan/TestCases/Posix/global-registration.c?rev=273464&view=auto>
>> ==============================================================================
>> --- compiler-rt/trunk/test/asan/TestCases/Posix/global-registration.c (added)
>> +++ compiler-rt/trunk/test/asan/TestCases/Posix/global-registration.c Wed Jun 22 14:59:10 2016
>> @@ -0,0 +1,56 @@
>> +// Test that globals from different shared objects all get registered.
>> +
>> +// This source file is compiled into three different source object files. Each
>> +// object file declares a global buffer. The first two are linked together, and
>> +// the third is loaded at runtime. We make sure that out-of-bounds accesses
>> +// are caught for all three buffers.
>> +
>> +// RUN: %clang_asan -c -o %t-one.o -DDYNAMICLIB=\"%t-dynamic.so\" -DMAIN_FILE %s
>> +// RUN: %clang_asan -c -o %t-two.o -DSECONDARY_FILE %s
>> +// RUN: %clang_asan -o %t %t-one.o %t-two.o
>> +// RUN: %clang_asan -shared -o %t-dynamic.so -DSHARED_LIBRARY_FILE %s
>> +// RUN: not %run %t 1 2>&1 | FileCheck --check-prefix ASAN-CHECK-1 %s
>> +// RUN: not %run %t 2 2>&1 | FileCheck --check-prefix ASAN-CHECK-2 %s
>> +// RUN: not %run %t 3 2>&1 | FileCheck --check-prefix ASAN-CHECK-3 %s
>> +
>> +#if MAIN_FILE
>> +
>> +#include <dlfcn.h>
>> +#include <stdlib.h>
>> +
>> +extern char buffer2[1];
>> +char buffer1[1] = { };
>> +
>> +int main(int argc, char *argv[]) {
>> +  int n = atoi(argv[1]);
>> +  if (n == 1) {
>> +    buffer1[argc] = 0;
>> +    // ASAN-CHECK-1: {{0x.* is located 1 bytes .* 'buffer1'}}
>> +  } else if (n == 2) {
>> +    buffer2[argc] = 0;
>> +    // ASAN-CHECK-2: {{0x.* is located 1 bytes .* 'buffer2'}}
>> +  } else if (n == 3) {
>> +    void *handle = dlopen(DYNAMICLIB, RTLD_NOW);
>> +    if (!handle)
>> +      return 1;
>> +
>> +    char *buffer = (char *)dlsym(handle, "buffer3");
>> +    if (!buffer)
>> +      return 1;
>> +
>> +    buffer[argc] = 0;
>> +    // ASAN-CHECK-3: {{0x.* is located 1 bytes .* 'buffer3'}}
>> +  }
>> +
>> +  return 0;
>> +}
>> +
>> +#elif SECONDARY_FILE
>> +
>> +char buffer2[1] = { };
>> +
>> +#elif SHARED_LIBRARY_FILE
>> +
>> +char buffer3[1] = { };
>> +
>> +#endif
>> 
>> 
>> _______________________________________________
>> llvm-commits mailing list
>> llvm-commits at lists.llvm.org <mailto:llvm-commits at lists.llvm.org>
>> http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits <http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-commits>
>> -- 
>> Mike
>> Sent from phone
> 
> -- 
> Mike
> Sent from phone

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20160626/4221fd22/attachment.html>


More information about the llvm-commits mailing list