From b9da933ec8860e0c217e2f6fc08f08687d40725f Mon Sep 17 00:00:00 2001 From: Martin Liska Date: Tue, 15 Nov 2022 12:02:36 +0100 Subject: [PATCH 3/3] asan: update expected format based on ASAN gcc/testsuite/ChangeLog: * c-c++-common/asan/global-overflow-1.c: Update expected format. * c-c++-common/asan/heap-overflow-1.c: Likewise. * c-c++-common/asan/strlen-overflow-1.c: Likewise. * c-c++-common/asan/strncpy-overflow-1.c: Likewise. * c-c++-common/hwasan/heap-overflow.c: Likewise. * g++.dg/asan/asan_mem_test.cc: Likewise. * g++.dg/asan/asan_oob_test.cc: Likewise. * g++.dg/asan/asan_str_test.cc: Likewise. * g++.dg/asan/asan_test.cc: Likewise. * g++.dg/asan/large-func-test-1.C: Likewise. --- .../c-c++-common/asan/global-overflow-1.c | 2 +- .../c-c++-common/asan/heap-overflow-1.c | 2 +- .../c-c++-common/asan/strlen-overflow-1.c | 2 +- .../c-c++-common/asan/strncpy-overflow-1.c | 2 +- .../c-c++-common/hwasan/heap-overflow.c | 2 +- gcc/testsuite/g++.dg/asan/asan_mem_test.cc | 20 +++++------ gcc/testsuite/g++.dg/asan/asan_oob_test.cc | 12 +++---- gcc/testsuite/g++.dg/asan/asan_str_test.cc | 4 +-- gcc/testsuite/g++.dg/asan/asan_test.cc | 36 +++++++++---------- gcc/testsuite/g++.dg/asan/large-func-test-1.C | 2 +- 10 files changed, 42 insertions(+), 42 deletions(-) diff --git a/gcc/testsuite/c-c++-common/asan/global-overflow-1.c b/gcc/testsuite/c-c++-common/asan/global-overflow-1.c index ec412231be0..b97801da2b7 100644 --- a/gcc/testsuite/c-c++-common/asan/global-overflow-1.c +++ b/gcc/testsuite/c-c++-common/asan/global-overflow-1.c @@ -25,5 +25,5 @@ int main() { /* { dg-skip-if "inaccurate debug info" { mips*-*-* } { "*" } { "-O0" } } */ /* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0.*(\n|\r\n|\r)" } */ /* { dg-output " #0 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*global-overflow-1.c:20|\[^\n\r]*:0|\[^\n\r]*\\+0x\[0-9a-z\]*)|\[(\])\[^\n\r]*(\n|\r\n|\r).*" } */ -/* { dg-output "0x\[0-9a-f\]+ is located 0 bytes to the right of global variable" } */ +/* { dg-output "0x\[0-9a-f\]+ is located 0 bytes after global variable" } */ /* { dg-output ".*YYY\[^\n\r]* of size 10\[^\n\r]*(\n|\r\n|\r)" } */ diff --git a/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c b/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c index 7ef048e636f..7d8744852ae 100644 --- a/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c +++ b/gcc/testsuite/c-c++-common/asan/heap-overflow-1.c @@ -25,7 +25,7 @@ int main(int argc, char **argv) { /* { dg-output "READ of size 1 at 0x\[0-9a-f\]+ thread T0.*(\n|\r\n|\r)" } */ /* { dg-output " #0 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*heap-overflow-1.c:21|\[^\n\r]*:0|\[^\n\r]*\\+0x\[0-9a-z\]*)|\[(\]).*(\n|\r\n|\r)" } */ -/* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes to the right of 10-byte region\[^\n\r]*(\n|\r\n|\r)" } */ +/* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes after 10-byte region\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output " #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output " #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*heap-overflow-1.c:19|\[^\n\r]*:0|\[^\n\r]*\\+0x\[0-9a-z\]*)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ diff --git a/gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c b/gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c index 86a79fd5d06..34c20c8ed50 100644 --- a/gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c +++ b/gcc/testsuite/c-c++-common/asan/strlen-overflow-1.c @@ -21,4 +21,4 @@ int main () { /* { dg-output "READ of size 2 at 0x\[0-9a-f\]+ thread T0.*(\n|\r\n|\r)" } */ /* { dg-output " #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strlen-overflow-1.c:19|\[^\n\r]*:0)|\[(\]).*(\n|\r\n|\r)" } */ -/* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes to the right of global variable" } */ +/* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes after global variable" } */ diff --git a/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c b/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c index 3d439160b7e..834284722f9 100644 --- a/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c +++ b/gcc/testsuite/c-c++-common/asan/strncpy-overflow-1.c @@ -16,7 +16,7 @@ int main(int argc, char **argv) { /* { dg-output "WRITE of size \[0-9\]* at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output " #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)strncpy|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output " #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strncpy-overflow-1.c:12|\[^\n\r]*:0|\[^\n\r]*\\+0x\[0-9a-z\]*)|\[(\]).*(\n|\r\n|\r)" } */ -/* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes to the right of 9-byte region\[^\n\r]*(\n|\r\n|\r)" } */ +/* { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 0 bytes after 9-byte region\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output "\[^\n\r]*allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output " #0 0x\[0-9a-f\]+ +(in _*(interceptor_|wrap_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ /* { dg-output " #1 0x\[0-9a-f\]+ +(in _*main (\[^\n\r]*strncpy-overflow-1.c:11|\[^\n\r]*:0|\[^\n\r]*\\+0x\[0-9a-z\]*)|\[(\])\[^\n\r]*(\n|\r\n|\r)" } */ diff --git a/gcc/testsuite/c-c++-common/hwasan/heap-overflow.c b/gcc/testsuite/c-c++-common/hwasan/heap-overflow.c index bddb38c81f1..a5a37715925 100644 --- a/gcc/testsuite/c-c++-common/hwasan/heap-overflow.c +++ b/gcc/testsuite/c-c++-common/hwasan/heap-overflow.c @@ -24,6 +24,6 @@ int main(int argc, char **argv) { /* { dg-output "HWAddressSanitizer: tag-mismatch on address 0x\[0-9a-f\]*.*" } */ /* { dg-output "READ of size 1 at 0x\[0-9a-f\]* tags: \[\[:xdigit:\]\]\[\[:xdigit:\]\]/\[\[:xdigit:\]\]\[\[:xdigit:\]\].* \\(ptr/mem\\) in thread T0.*" } */ -/* { dg-output "located 0 bytes to the right of 10-byte region.*" } */ +/* { dg-output "located 0 bytes after 10-byte region.*" } */ /* { dg-output "allocated here:.*" } */ /* { dg-output "#1 0x\[0-9a-f\]+ +in _*main \[^\n\r]*heap-overflow.c:18" } */ diff --git a/gcc/testsuite/g++.dg/asan/asan_mem_test.cc b/gcc/testsuite/g++.dg/asan/asan_mem_test.cc index 5fc4af7e9e3..7f6f3f4c1f8 100644 --- a/gcc/testsuite/g++.dg/asan/asan_mem_test.cc +++ b/gcc/testsuite/g++.dg/asan/asan_mem_test.cc @@ -31,18 +31,18 @@ void MemSetOOBTestTemplate(size_t length) { MEMSET(array + length, 0, zero); MEMSET(array + length + 1, 0, zero); - // try to memset bytes to the right of array + // try to memset bytes after array EXPECT_DEATH(MEMSET(array, 0, size + 1), RightOOBWriteMessage(0)); EXPECT_DEATH(MEMSET((char*)(array + length) - 1, element, 6), RightOOBWriteMessage(0)); EXPECT_DEATH(MEMSET(array + 1, element, size + sizeof(T)), RightOOBWriteMessage(0)); - // whole interval is to the right + // whole interval is after EXPECT_DEATH(MEMSET(array + length + 1, 0, 10), RightOOBWriteMessage(sizeof(T))); - // try to memset bytes to the left of array + // try to memset bytes before array EXPECT_DEATH(MEMSET((char*)array - 1, element, size), LeftOOBWriteMessage(1)); EXPECT_DEATH(MEMSET((char*)array - 5, 0, 6), @@ -52,11 +52,11 @@ void MemSetOOBTestTemplate(size_t length) { EXPECT_DEATH(memset(array - 5, element, size + 5 * sizeof(T)), LeftOOBWriteMessage(5 * sizeof(T))); } - // whole interval is to the left + // whole interval is before EXPECT_DEATH(MEMSET(array - 2, 0, sizeof(T)), LeftOOBWriteMessage(2 * sizeof(T))); - // try to memset bytes both to the left & to the right + // try to memset bytes both before & after EXPECT_DEATH(MEMSET((char*)array - 2, element, size + 4), LeftOOBWriteMessage(2)); @@ -108,7 +108,7 @@ TEST(AddressSanitizer, LargeOOBInMemset) { // fprintf(stderr, " large oob memset: %p %p %zd\n", x1, x2, size); // Do a memset on x1 with huge out-of-bound access that will end up in x2. EXPECT_DEATH(Ident(memset)(x1, 0, size * 2), - "is located 0 bytes to the right"); + "is located 0 bytes after"); delete [] x1; delete [] x2; return; @@ -137,25 +137,25 @@ void MemTransferOOBTestTemplate(size_t length) { M::transfer(dest, src - 1, zero); M::transfer(dest, src, zero); - // try to change mem to the right of dest + // try to change mem after dest EXPECT_DEATH(M::transfer(dest + 1, src, size), RightOOBWriteMessage(0)); EXPECT_DEATH(M::transfer((char*)(dest + length) - 1, src, 5), RightOOBWriteMessage(0)); - // try to change mem to the left of dest + // try to change mem before dest EXPECT_DEATH(M::transfer(dest - 2, src, size), LeftOOBWriteMessage(2 * sizeof(T))); EXPECT_DEATH(M::transfer((char*)dest - 3, src, 4), LeftOOBWriteMessage(3)); - // try to access mem to the right of src + // try to access mem after src EXPECT_DEATH(M::transfer(dest, src + 2, size), RightOOBReadMessage(0)); EXPECT_DEATH(M::transfer(dest, (char*)(src + length) - 3, 6), RightOOBReadMessage(0)); - // try to access mem to the left of src + // try to access mem before src EXPECT_DEATH(M::transfer(dest, src - 1, size), LeftOOBReadMessage(sizeof(T))); EXPECT_DEATH(M::transfer(dest, (char*)src - 6, 7), diff --git a/gcc/testsuite/g++.dg/asan/asan_oob_test.cc b/gcc/testsuite/g++.dg/asan/asan_oob_test.cc index 7d3f55785f0..05fa7229486 100644 --- a/gcc/testsuite/g++.dg/asan/asan_oob_test.cc +++ b/gcc/testsuite/g++.dg/asan/asan_oob_test.cc @@ -33,7 +33,7 @@ void OOBTest() { for (int size = sizeof(T); size < 20; size += 5) { for (int i = -5; i < 0; i++) { const char *str = - "is located.*%d byte.*to the left"; + "is located.*%d byte.*before"; sprintf(expected_str, str, abs(i)); EXPECT_DEATH(oob_test(size, i), expected_str); } @@ -43,7 +43,7 @@ void OOBTest() { for (int i = size - sizeof(T) + 1; i <= (int)(size + 2 * sizeof(T)); i++) { const char *str = - "is located.*%d byte.*to the right"; + "is located.*%d byte.*after"; int off = i >= size ? (i - size) : 0; // we don't catch unaligned partially OOB accesses. if (i % sizeof(T)) continue; @@ -53,9 +53,9 @@ void OOBTest() { } EXPECT_DEATH(oob_test(kLargeMalloc, -1), - "is located.*1 byte.*to the left"); + "is located.*1 byte.*before"); EXPECT_DEATH(oob_test(kLargeMalloc, kLargeMalloc), - "is located.*0 byte.*to the right"); + "is located.*0 byte.*after"); } // TODO(glider): the following tests are EXTREMELY slow on Darwin: @@ -89,7 +89,7 @@ TEST(AddressSanitizer, OOBRightTest) { } else { int outside_bytes = offset > alloc_size ? (offset - alloc_size) : 0; const char *str = - "is located.%d *byte.*to the right"; + "is located.%d *byte.*after"; char expected_str[100]; sprintf(expected_str, str, outside_bytes); EXPECT_DEATH(asan_write_sized_aligned(addr, access_size), @@ -106,7 +106,7 @@ TEST(AddressSanitizer, LargeOOBRightTest) { for (size_t i = 16; i <= 256; i *= 2) { size_t size = large_power_of_two - i; char *p = Ident(new char[size]); - EXPECT_DEATH(p[size] = 0, "is located 0 bytes to the right"); + EXPECT_DEATH(p[size] = 0, "is located 0 bytes after"); delete [] p; } } diff --git a/gcc/testsuite/g++.dg/asan/asan_str_test.cc b/gcc/testsuite/g++.dg/asan/asan_str_test.cc index 207de422316..56e136930e4 100644 --- a/gcc/testsuite/g++.dg/asan/asan_str_test.cc +++ b/gcc/testsuite/g++.dg/asan/asan_str_test.cc @@ -19,7 +19,7 @@ static char global_string[] = "global"; static size_t global_string_length = 6; // Input to a test is a zero-terminated string str with given length -// Accesses to the bytes to the left and to the right of str +// Accesses to the bytes to the left and after str // are presumed to produce OOB errors void StrLenOOBTestTemplate(char *str, size_t length, bool is_global) { // Normal strlen calls @@ -30,7 +30,7 @@ void StrLenOOBTestTemplate(char *str, size_t length, bool is_global) { } // Arg of strlen is not malloced, OOB access if (!is_global) { - // We don't insert RedZones to the left of global variables + // We don't insert RedZones before global variables EXPECT_DEATH(Ident(strlen(str - 1)), LeftOOBReadMessage(1)); EXPECT_DEATH(Ident(strlen(str - 5)), LeftOOBReadMessage(5)); } diff --git a/gcc/testsuite/g++.dg/asan/asan_test.cc b/gcc/testsuite/g++.dg/asan/asan_test.cc index dbf1a6ac0a5..0d976801cf1 100644 --- a/gcc/testsuite/g++.dg/asan/asan_test.cc +++ b/gcc/testsuite/g++.dg/asan/asan_test.cc @@ -286,7 +286,7 @@ TEST(AddressSanitizer, SignalTest) { static void TestLargeMalloc(size_t size) { char buff[1024]; - sprintf(buff, "is located 1 bytes to the left of %lu-byte", (long)size); + sprintf(buff, "is located 1 bytes before %lu-byte", (long)size); EXPECT_DEATH(Ident((char*)malloc(size))[-1] = 0, buff); } @@ -301,7 +301,7 @@ TEST(AddressSanitizer, HugeMallocTest) { if (SANITIZER_WORDSIZE != 64 || ASAN_AVOID_EXPENSIVE_TESTS) return; size_t n_megs = 4100; EXPECT_DEATH(Ident((char*)malloc(n_megs << 20))[-1] = 0, - "is located 1 bytes to the left|" + "is located 1 bytes before|" "AddressSanitizer failed to allocate"); } @@ -316,9 +316,9 @@ TEST(AddressSanitizer, memalign) { for (int align = 16; align <= (1 << 23); align *= 2) { size_t size = align * 5; EXPECT_DEATH(MemalignRun(align, size, -1), - "is located 1 bytes to the left"); + "is located 1 bytes before"); EXPECT_DEATH(MemalignRun(align, size, size + 1), - "is located 1 bytes to the right"); + "is located 1 bytes after"); } } #endif // SANITIZER_TEST_HAS_MEMALIGN @@ -696,7 +696,7 @@ TEST(AddressSanitizer, Store128Test) { EXPECT_DEATH(_mm_store_si128((__m128i*)p, value_wide), "WRITE of size 16"); EXPECT_DEATH(_mm_store_si128((__m128i*)p, value_wide), - "located 0 bytes to the right of 12-byte"); + "located 0 bytes after 12-byte"); free(a); } #endif @@ -709,7 +709,7 @@ string RightOOBErrorMessage(int oob_distance, bool is_write) { #if !GTEST_USES_SIMPLE_RE "buffer-overflow.*%s.*" #endif - "located %d bytes to the right", + "located %d bytes after", #if !GTEST_USES_SIMPLE_RE is_write ? "WRITE" : "READ", #endif @@ -733,7 +733,7 @@ string LeftOOBErrorMessage(int oob_distance, bool is_write) { #if !GTEST_USES_SIMPLE_RE ASAN_PCRE_DOTALL "%s.*" #endif - "located %d bytes to the left", + "located %d bytes before", #if !GTEST_USES_SIMPLE_RE is_write ? "WRITE" : "READ", #endif @@ -752,7 +752,7 @@ string LeftOOBReadMessage(int oob_distance) { string LeftOOBAccessMessage(int oob_distance) { assert(oob_distance > 0); char expected_str[100]; - sprintf(expected_str, "located %d bytes to the left", oob_distance); + sprintf(expected_str, "located %d bytes before", oob_distance); return string(expected_str); } @@ -774,7 +774,7 @@ char* MallocAndMemsetString(size_t size) { EXPECT_DEATH(READ_N_BYTES, \ ASAN_PCRE_DOTALL \ "AddressSanitizer: heap-buffer-overflow" \ - ".* is located 0 bytes to the right of 10-byte region"); \ + ".* is located 0 bytes after 10-byte region"); \ close(fd); \ delete [] x; \ @@ -976,23 +976,23 @@ TEST(AddressSanitizer, GlobalTest) { glob5[Ident(4)] = 0; EXPECT_DEATH(glob5[Ident(5)] = 0, - "0 bytes to the right of global variable.*glob5.* size 5"); + "0 bytes after global variable.*glob5.* size 5"); EXPECT_DEATH(glob5[Ident(5+6)] = 0, - "6 bytes to the right of global variable.*glob5.* size 5"); + "6 bytes after global variable.*glob5.* size 5"); Ident(static110); // avoid optimizations static110[Ident(0)] = 0; static110[Ident(109)] = 0; EXPECT_DEATH(static110[Ident(110)] = 0, - "0 bytes to the right of global variable"); + "0 bytes after global variable"); EXPECT_DEATH(static110[Ident(110+7)] = 0, - "7 bytes to the right of global variable"); + "7 bytes after global variable"); Ident(func_static15); // avoid optimizations func_static15[Ident(0)] = 0; EXPECT_DEATH(func_static15[Ident(15)] = 0, - "0 bytes to the right of global variable"); + "0 bytes after global variable"); EXPECT_DEATH(func_static15[Ident(15 + 9)] = 0, - "9 bytes to the right of global variable"); + "9 bytes after global variable"); Ident(fs1); Ident(fs2); @@ -1000,12 +1000,12 @@ TEST(AddressSanitizer, GlobalTest) { // We don't create left redzones, so this is not 100% guaranteed to fail. // But most likely will. - EXPECT_DEATH(fs2[Ident(-1)] = 0, "is located.*of global variable"); + EXPECT_DEATH(fs2[Ident(-1)] = 0, "is located.*global variable"); EXPECT_DEATH(Ident(Ident(ConstGlob)[8]), - "is located 1 bytes to the right of .*ConstGlob"); + "is located 1 bytes after .*ConstGlob"); EXPECT_DEATH(Ident(Ident(StaticConstGlob)[5]), - "is located 2 bytes to the right of .*StaticConstGlob"); + "is located 2 bytes after .*StaticConstGlob"); // call stuff from another file. GlobalsTest(0); diff --git a/gcc/testsuite/g++.dg/asan/large-func-test-1.C b/gcc/testsuite/g++.dg/asan/large-func-test-1.C index ac9deb898c8..a43235ba1cb 100644 --- a/gcc/testsuite/g++.dg/asan/large-func-test-1.C +++ b/gcc/testsuite/g++.dg/asan/large-func-test-1.C @@ -40,7 +40,7 @@ int main() { // { dg-output "0x\[0-9a-f\]+ at pc 0x\[0-9a-f\]+ bp 0x\[0-9a-f\]+ sp 0x\[0-9a-f\]+\[^\n\r]*(\n|\r\n|\r)" } // { dg-output "\[^\n\r]*READ of size 4 at 0x\[0-9a-f\]+ thread T0\[^\n\r]*(\n|\r\n|\r)" } // { dg-output " #0 0x\[0-9a-f\]+ +(in \[^\n\r]*LargeFunction\[^\n\r]*(large-func-test-1.C:18|\[^\n\r]*:0|\[^\n\r]*\\+0x\[0-9a-z\]*)|\[(\]).*(\n|\r\n|\r)" } -// { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 44 bytes to the right of 400-byte region.*(\n|\r\n|\r)" } +// { dg-output "\[^\n\r]*0x\[0-9a-f\]+ is located 44 bytes after 400-byte region.*(\n|\r\n|\r)" } // { dg-output "\[^\n\r]*allocated by thread T0 here:\[^\n\r]*(\n|\r\n|\r)" } // { dg-output " #0( 0x\[0-9a-f\]+ +(in _*(interceptor_|)malloc|\[(\])\[^\n\r]*(\n|\r\n|\r)" } // { dg-output " #1|) 0x\[0-9a-f\]+ +(in (operator new|(wrap|)_*_Zn\[aw\]\[mj\])|\[(\])\[^\n\r]*(\n|\r\n|\r)" } -- 2.38.1