Loading compiler-rt/test/asan/TestCases/contiguous_container_crash.cpp +77 −4 Original line number Diff line number Diff line Loading @@ -6,6 +6,15 @@ // RUN: not %run %t odd-alignment-end 2>&1 | FileCheck --check-prefix=CHECK-CRASH %s // RUN: %env_asan_opts=detect_container_overflow=0 %run %t crash // // RUN: not %run %t double-crash-beg 2>&1 | FileCheck --check-prefix=DOUBLE-CRASH-BEG %s // RUN: not %run %t double-crash-end 2>&1 | FileCheck --check-prefix=DOUBLE-CRASH-END %s // RUN: not %run %t double-bad-bounds 2>&1 | FileCheck --check-prefix=DOUBLE-BAD-BOUNDS %s // RUN: not %run %t double-unaligned-bad-bounds 2>&1 | FileCheck --check-prefix=DOUBLE-UNALIGNED-BAD-BOUNDS %s --implicit-check-not="beg is not aligned by" // RUN: not %run %t double-odd-alignment 2>&1 | FileCheck --check-prefix=DOUBLE-CRASH-BEG %s // RUN: not %run %t double-odd-alignment-end 2>&1 | FileCheck --check-prefix=DOUBLE-CRASH-END %s // RUN: %env_asan_opts=detect_container_overflow=0 %run %t double-crash-beg // RUN: %env_asan_opts=detect_container_overflow=0 %run %t double-crash-end // // Test crash due to __sanitizer_annotate_contiguous_container. #include <assert.h> Loading Loading @@ -55,6 +64,58 @@ int OddAlignmentEnd() { return (int)t[60 * one]; // Touches the poisoned memory. } int DoubleEndedTestCrashBeg() { long t[100]; t[15] = 0; __sanitizer_annotate_double_ended_contiguous_container( &t[0], &t[0] + 100, &t[0], &t[0] + 100, &t[0] + 25, &t[0] + 75); // DOUBLE-CRASH-BEG: AddressSanitizer: container-overflow // DOUBLE-CRASH-BEG: if you don't care about these errors you may set ASAN_OPTIONS=detect_container_overflow=0 return (int)t[15 * one]; } int DoubleEndedTestCrashEnd() { long t[100]; t[85] = 0; __sanitizer_annotate_double_ended_contiguous_container( &t[0], &t[0] + 100, &t[0], &t[0] + 100, &t[0] + 25, &t[0] + 75); // DOUBLE-CRASH-END: AddressSanitizer: container-overflow // DOUBLE-CRASH-END: if you don't care about these errors you may set ASAN_OPTIONS=detect_container_overflow=0 return (int)t[85 * one]; } void DoubleEndedBadBounds() { long t[100]; // DOUBLE-BAD-BOUNDS: ERROR: AddressSanitizer: bad parameters to __sanitizer_annotate_double_ended_contiguous_container __sanitizer_annotate_double_ended_contiguous_container( &t[0], &t[0] + 100, &t[0], &t[0] + 100, &t[0] + 75, &t[0] + 25); } void DoubleEndedUnalignedBadBounds() { char t[100]; // DOUBLE-UNALIGNED-BAD-BOUNDS: ERROR: AddressSanitizer: bad parameters to __sanitizer_annotate_double_ended_contiguous_container __sanitizer_annotate_double_ended_contiguous_container( &t[1], &t[0] + 100, &t[0], &t[0] + 100, &t[0] + 25, &t[0] + 75); } int DoubleEndedOddAlignment() { int t[100]; t[5] = 0; __sanitizer_annotate_double_ended_contiguous_container( &t[1], &t[0] + 100, &t[1], &t[0] + 100, &t[1] + 10, &t[1] + 60); // DOUBLE-CRASH-BEG: AddressSanitizer: container-overflow return (int)t[5 * one]; } int DoubleEndedOddAlignmentEnd() { int t[100]; t[95] = 0; __sanitizer_annotate_double_ended_contiguous_container( &t[0], &t[0] + 99, &t[0], &t[0] + 99, &t[0] + 10, &t[0] + 90); // DOUBLE-CRASH-END: AddressSanitizer: container-overflow return (int)t[95 * one]; } int main(int argc, char **argv) { assert(argc == 2); if (!strcmp(argv[1], "crash")) Loading @@ -67,5 +128,17 @@ int main(int argc, char **argv) { return OddAlignment(); else if (!strcmp(argv[1], "odd-alignment-end")) return OddAlignmentEnd(); else if (!strcmp(argv[1], "double-crash-beg")) return DoubleEndedTestCrashBeg(); else if (!strcmp(argv[1], "double-crash-end")) return DoubleEndedTestCrashEnd(); else if (!strcmp(argv[1], "double-bad-bounds")) DoubleEndedBadBounds(); else if (!strcmp(argv[1], "double-unaligned-bad-bounds")) DoubleEndedUnalignedBadBounds(); else if (!strcmp(argv[1], "double-odd-alignment")) return DoubleEndedOddAlignment(); else if (!strcmp(argv[1], "double-odd-alignment-end")) return DoubleEndedOddAlignmentEnd(); return 0; } Loading
compiler-rt/test/asan/TestCases/contiguous_container_crash.cpp +77 −4 Original line number Diff line number Diff line Loading @@ -6,6 +6,15 @@ // RUN: not %run %t odd-alignment-end 2>&1 | FileCheck --check-prefix=CHECK-CRASH %s // RUN: %env_asan_opts=detect_container_overflow=0 %run %t crash // // RUN: not %run %t double-crash-beg 2>&1 | FileCheck --check-prefix=DOUBLE-CRASH-BEG %s // RUN: not %run %t double-crash-end 2>&1 | FileCheck --check-prefix=DOUBLE-CRASH-END %s // RUN: not %run %t double-bad-bounds 2>&1 | FileCheck --check-prefix=DOUBLE-BAD-BOUNDS %s // RUN: not %run %t double-unaligned-bad-bounds 2>&1 | FileCheck --check-prefix=DOUBLE-UNALIGNED-BAD-BOUNDS %s --implicit-check-not="beg is not aligned by" // RUN: not %run %t double-odd-alignment 2>&1 | FileCheck --check-prefix=DOUBLE-CRASH-BEG %s // RUN: not %run %t double-odd-alignment-end 2>&1 | FileCheck --check-prefix=DOUBLE-CRASH-END %s // RUN: %env_asan_opts=detect_container_overflow=0 %run %t double-crash-beg // RUN: %env_asan_opts=detect_container_overflow=0 %run %t double-crash-end // // Test crash due to __sanitizer_annotate_contiguous_container. #include <assert.h> Loading Loading @@ -55,6 +64,58 @@ int OddAlignmentEnd() { return (int)t[60 * one]; // Touches the poisoned memory. } int DoubleEndedTestCrashBeg() { long t[100]; t[15] = 0; __sanitizer_annotate_double_ended_contiguous_container( &t[0], &t[0] + 100, &t[0], &t[0] + 100, &t[0] + 25, &t[0] + 75); // DOUBLE-CRASH-BEG: AddressSanitizer: container-overflow // DOUBLE-CRASH-BEG: if you don't care about these errors you may set ASAN_OPTIONS=detect_container_overflow=0 return (int)t[15 * one]; } int DoubleEndedTestCrashEnd() { long t[100]; t[85] = 0; __sanitizer_annotate_double_ended_contiguous_container( &t[0], &t[0] + 100, &t[0], &t[0] + 100, &t[0] + 25, &t[0] + 75); // DOUBLE-CRASH-END: AddressSanitizer: container-overflow // DOUBLE-CRASH-END: if you don't care about these errors you may set ASAN_OPTIONS=detect_container_overflow=0 return (int)t[85 * one]; } void DoubleEndedBadBounds() { long t[100]; // DOUBLE-BAD-BOUNDS: ERROR: AddressSanitizer: bad parameters to __sanitizer_annotate_double_ended_contiguous_container __sanitizer_annotate_double_ended_contiguous_container( &t[0], &t[0] + 100, &t[0], &t[0] + 100, &t[0] + 75, &t[0] + 25); } void DoubleEndedUnalignedBadBounds() { char t[100]; // DOUBLE-UNALIGNED-BAD-BOUNDS: ERROR: AddressSanitizer: bad parameters to __sanitizer_annotate_double_ended_contiguous_container __sanitizer_annotate_double_ended_contiguous_container( &t[1], &t[0] + 100, &t[0], &t[0] + 100, &t[0] + 25, &t[0] + 75); } int DoubleEndedOddAlignment() { int t[100]; t[5] = 0; __sanitizer_annotate_double_ended_contiguous_container( &t[1], &t[0] + 100, &t[1], &t[0] + 100, &t[1] + 10, &t[1] + 60); // DOUBLE-CRASH-BEG: AddressSanitizer: container-overflow return (int)t[5 * one]; } int DoubleEndedOddAlignmentEnd() { int t[100]; t[95] = 0; __sanitizer_annotate_double_ended_contiguous_container( &t[0], &t[0] + 99, &t[0], &t[0] + 99, &t[0] + 10, &t[0] + 90); // DOUBLE-CRASH-END: AddressSanitizer: container-overflow return (int)t[95 * one]; } int main(int argc, char **argv) { assert(argc == 2); if (!strcmp(argv[1], "crash")) Loading @@ -67,5 +128,17 @@ int main(int argc, char **argv) { return OddAlignment(); else if (!strcmp(argv[1], "odd-alignment-end")) return OddAlignmentEnd(); else if (!strcmp(argv[1], "double-crash-beg")) return DoubleEndedTestCrashBeg(); else if (!strcmp(argv[1], "double-crash-end")) return DoubleEndedTestCrashEnd(); else if (!strcmp(argv[1], "double-bad-bounds")) DoubleEndedBadBounds(); else if (!strcmp(argv[1], "double-unaligned-bad-bounds")) DoubleEndedUnalignedBadBounds(); else if (!strcmp(argv[1], "double-odd-alignment")) return DoubleEndedOddAlignment(); else if (!strcmp(argv[1], "double-odd-alignment-end")) return DoubleEndedOddAlignmentEnd(); return 0; }