llvmorg-github-actions[bot] wrote:
<!--LLVM PR SUMMARY COMMENT--> @llvm/pr-subscribers-compiler-rt-sanitizer Author: Vitaly Buka (vitalybuka) <details> <summary>Changes</summary> --- Full diff: https://github.com/llvm/llvm-project/pull/195673.diff 1 Files Affected: - (modified) compiler-rt/test/asan/TestCases/contiguous_container_crash.cpp (+73) ``````````diff diff --git a/compiler-rt/test/asan/TestCases/contiguous_container_crash.cpp b/compiler-rt/test/asan/TestCases/contiguous_container_crash.cpp index a13d52bb21743..93e0d8d158d80 100644 --- a/compiler-rt/test/asan/TestCases/contiguous_container_crash.cpp +++ b/compiler-rt/test/asan/TestCases/contiguous_container_crash.cpp @@ -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> @@ -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")) @@ -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; } `````````` </details> https://github.com/llvm/llvm-project/pull/195673 _______________________________________________ llvm-branch-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits
