https://gcc.gnu.org/bugzilla/show_bug.cgi?id=112677

            Bug ID: 112677
           Summary: ASAN reports stack-buffer-overflow in
                    tree-vect-loop.cc vect_is_simple_use when compiling
                    with -mavx512
           Product: gcc
           Version: 14.0
            Status: UNCONFIRMED
          Keywords: needs-bisection
          Severity: normal
          Priority: P3
         Component: target
          Assignee: unassigned at gcc dot gnu.org
          Reporter: fkastl at suse dot cz
  Target Milestone: ---
              Host: x86_64-linux
            Target: x86_64-linux

Created attachment 56670
  --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=56670&action=edit
A list of testcases triggering this error

On many testcases from the GCC testsuite an ASAN-instrumented GCC reports
stack-buffer-overflow error in vect_is_simple_use at tree-vect-loop.cc:13584
file. All of the errors happen when compiling with some kind of -mavx512 option
or with -march=skylake-avx512.

I'm attaching a list of testcases that trigger this error.

Compiler configured with:

--enable-languages=default,jit,lto,go,d --enable-host-shared
--enable-checking=release --disable-multilib --with-build-config=bootstrap-asan


One example of a testcase where this error occurs is g++.dg/opt/pr112374.C.
Running

gcc src/gcc/testsuite/g++.dg/opt/pr112374.C  -O2 -march=skylake-avx512

results in

==46365==ERROR: AddressSanitizer: stack-buffer-overflow on address
0x7f41ef71c6f8 at pc 0x00000562f3ab bp 0x7ffee76484d0 sp 0x7ffee76484c8
WRITE of size 8 at 0x7f41ef71c6f8 thread T0
    #0 0x562f3aa in vect_is_simple_use(tree_node*, vec_info*, vect_def_type*,
tree_node**, _stmt_vec_info**, gimple**)
/home/worker/buildworker/tiber-gcc-asan/build/gcc/tree-vect-stmts.cc:13584
    #1 0x2c708ad in vectorizable_reduction(_loop_vec_info*, _stmt_vec_info*,
_slp_tree*, _slp_instance*, vec<stmt_info_for_cost, va_heap, vl_ptr>*)
/home/worker/buildworker/tiber-gcc-asan/build/gcc/tree-vect-loop.cc:7632
    #2 0x2c971b5 in vect_analyze_loop_operations
/home/worker/buildworker/tiber-gcc-asan/build/gcc/tree-vect-loop.cc:2149
    #3 0x2c971b5 in vect_analyze_loop_2
/home/worker/buildworker/tiber-gcc-asan/build/gcc/tree-vect-loop.cc:3011
    #4 0x2c9dc43 in vect_analyze_loop_1
/home/worker/buildworker/tiber-gcc-asan/build/gcc/tree-vect-loop.cc:3450
    #5 0x2ca037e in vect_analyze_loop(loop*, vec_info_shared*)
/home/worker/buildworker/tiber-gcc-asan/build/gcc/tree-vect-loop.cc:3604
    #6 0x2d9f495 in try_vectorize_loop_1
/home/worker/buildworker/tiber-gcc-asan/build/gcc/tree-vectorizer.cc:1066
    #7 0x2da0cd9 in execute
/home/worker/buildworker/tiber-gcc-asan/build/gcc/tree-vectorizer.cc:1298
    #8 0x1f4a262 in execute_one_pass(opt_pass*)
/home/worker/buildworker/tiber-gcc-asan/build/gcc/passes.cc:2641
    #9 0x1f4bb8c in execute_pass_list_1
/home/worker/buildworker/tiber-gcc-asan/build/gcc/passes.cc:2750
    #10 0x1f4bbb2 in execute_pass_list_1
/home/worker/buildworker/tiber-gcc-asan/build/gcc/passes.cc:2751
    #11 0x1f4bbb2 in execute_pass_list_1
/home/worker/buildworker/tiber-gcc-asan/build/gcc/passes.cc:2751
    #12 0x1f4bc25 in execute_pass_list(function*, opt_pass*)
/home/worker/buildworker/tiber-gcc-asan/build/gcc/passes.cc:2761
    #13 0x130a814 in cgraph_node::expand()
/home/worker/buildworker/tiber-gcc-asan/build/gcc/cgraphunit.cc:1841
    #14 0x130a814 in cgraph_node::expand()
/home/worker/buildworker/tiber-gcc-asan/build/gcc/cgraphunit.cc:1794
    #15 0x131004d in expand_all_functions
/home/worker/buildworker/tiber-gcc-asan/build/gcc/cgraphunit.cc:2024
    #16 0x131004d in symbol_table::compile()
/home/worker/buildworker/tiber-gcc-asan/build/gcc/cgraphunit.cc:2398
    #17 0x131004d in symbol_table::compile()
/home/worker/buildworker/tiber-gcc-asan/build/gcc/cgraphunit.cc:2309
    #18 0x1316999 in symbol_table::finalize_compilation_unit()
/home/worker/buildworker/tiber-gcc-asan/build/gcc/cgraphunit.cc:2583
    #19 0x23492cf in compile_file
/home/worker/buildworker/tiber-gcc-asan/build/gcc/toplev.cc:473
    #20 0x7e26dd in do_compile
/home/worker/buildworker/tiber-gcc-asan/build/gcc/toplev.cc:2129
    #21 0x7e26dd in toplev::main(int, char**)
/home/worker/buildworker/tiber-gcc-asan/build/gcc/toplev.cc:2285
    #22 0x7ed873 in main
/home/worker/buildworker/tiber-gcc-asan/build/gcc/main.cc:39
    #23 0x7f41f10281af in __libc_start_call_main (/lib64/libc.so.6+0x281af)
(BuildId: bbeee08e5f56966e641c4f3ba4ea1da9d730d0ab)
    #24 0x7f41f1028278 in __libc_start_main@@GLIBC_2.34
(/lib64/libc.so.6+0x28278) (BuildId: bbeee08e5f56966e641c4f3ba4ea1da9d730d0ab)
    #25 0x7ef1d4 in _start ../sysdeps/x86_64/start.S:115

Address 0x7f41ef71c6f8 is located in stack of thread T0 at offset 1784 in frame
    #0 0x2c6e69f in vectorizable_reduction(_loop_vec_info*, _stmt_vec_info*,
_slp_tree*, _slp_instance*, vec<stmt_info_for_cost, va_heap, vl_ptr>*)
/home/worker/buildworker/tiber-gcc-asan/build/gcc/tree-vect-loop.cc:7385

  This frame has 145 object(s):
    [48, 50) '<unknown>'
    [64, 66) '<unknown>'
    [80, 84) 'dt' (line 7631)
    [96, 100) '<unknown>'
    [112, 116) '<unknown>'
    [128, 132) '<unknown>'
    [144, 148) 'cond_initial_dt' (line 7770)
    [160, 164) '<unknown>'
    [176, 180) 'orig_code' (line 7848)
    [192, 196) '<unknown>'
    [208, 212) 'reduc_fn' (line 7911)
    [224, 228) '<unknown>'
    [240, 244) '<unknown>'
    [256, 260) '<unknown>'
    [272, 276) '<unknown>'
    [288, 292) '<unknown>'
    [304, 308) '<unknown>'
    [320, 324) '<unknown>'
    [336, 340) '<unknown>'
    [352, 356) '<unknown>'
    [368, 372) '<unknown>'
    [384, 388) '<unknown>'
    [400, 404) '<unknown>'
    [416, 420) '<unknown>'
    [432, 436) '<unknown>'
    [448, 452) '<unknown>'
    [464, 468) 'overflow' (line 7238)
    [480, 484) '<unknown>'
    [496, 500) '<unknown>'
    [512, 520) 'use_p' (line 7456)
    [544, 552) 'use_stmt' (line 7457)
    [576, 584) 'def_stmt_info' (line 7630)
    [608, 616) '<unknown>'
    [640, 648) '<unknown>'
    [672, 680) 'nunits_out' (line 7804)
    [704, 712) '<unknown>'
    [736, 744) 'r'
    [768, 776) '<unknown>'
    [800, 808) '<unknown>'
    [832, 840) '<unknown>'
    [864, 872) '<unknown>'
    [896, 904) '<unknown>'
    [928, 936) '<unknown>'
    [960, 968) '<unknown>'
    [992, 1000) '<unknown>'
    [1024, 1032) '<unknown>'
    [1056, 1064) '<unknown>'
    [1088, 1096) '<unknown>'
    [1120, 1128) '<unknown>'
    [1152, 1160) '<unknown>'
    [1184, 1192) '<unknown>'
    [1216, 1224) '<unknown>'
    [1248, 1256) '<unknown>'
    [1280, 1288) '<unknown>'
    [1312, 1320) '<unknown>'
    [1344, 1352) '<unknown>'
    [1376, 1384) '<unknown>'
    [1408, 1416) '<unknown>'
    [1440, 1448) '<unknown>'
    [1472, 1480) '<unknown>'
    [1504, 1520) '<unknown>'
    [1536, 1552) '<unknown>'
    [1568, 1584) '<unknown>'
    [1600, 1616) '<unknown>'
    [1632, 1648) '<unknown>'
    [1664, 1680) '<unknown>'
    [1696, 1712) '<unknown>'
    [1728, 1744) '<unknown>'
    [1760, 1784) 'vectype_op' (line 7387) <== Memory access at offset 1784
overflows this variable
    [1824, 1848) '<unknown>'
    [1888, 1912) '<unknown>'
    [1952, 1976) '<unknown>'
    [2016, 2040) '<unknown>'
    [2080, 2104) '<unknown>'
    [2144, 2168) '<unknown>'
    [2208, 2232) '<unknown>'
    [2272, 2296) '<unknown>'
    [2336, 2360) '<unknown>'
    [2400, 2424) '<unknown>'
    [2464, 2488) '<unknown>'
    [2528, 2552) '<unknown>'
    [2592, 2616) '<unknown>'
    [2656, 2680) '<unknown>'
    [2720, 2744) '<unknown>'
    [2784, 2808) '<unknown>'
    [2848, 2872) '<unknown>'
    [2912, 2936) '<unknown>'
    [2976, 3000) '<unknown>'
    [3040, 3064) '<unknown>'
    [3104, 3128) '<unknown>'
    [3168, 3192) '<unknown>'
    [3232, 3256) '<unknown>'
    [3296, 3320) '<unknown>'
    [3360, 3384) '<unknown>'
    [3424, 3448) '<unknown>'
    [3488, 3512) '<unknown>'
    [3552, 3576) '<unknown>'
    [3616, 3640) '<unknown>'
    [3680, 3712) '<unknown>'
    [3744, 3776) '<unknown>'
    [3808, 3840) '<unknown>'
    [3872, 3904) '<unknown>'
    [3936, 3968) '<unknown>'
    [4000, 4032) '<unknown>'
    [4064, 4096) '<unknown>'
    [4128, 4160) '<unknown>'
    [4192, 4224) '<unknown>'
    [4256, 4288) '<unknown>'
    [4320, 4352) '<unknown>'
    [4384, 4416) '<unknown>'
    [4448, 4480) '<unknown>'
    [4512, 4544) '<unknown>'
    [4576, 4608) '<unknown>'
    [4640, 4672) '<unknown>'
    [4704, 4736) '<unknown>'
    [4768, 4800) '<unknown>'
    [4832, 4864) '<unknown>'
    [4896, 4928) '<unknown>'
    [4960, 4992) '<unknown>'
    [5024, 5056) '<unknown>'
    [5088, 5120) '<unknown>'
    [5152, 5184) '<unknown>'
    [5216, 5248) '<unknown>'
    [5280, 5312) '<unknown>'
    [5344, 5376) '<unknown>'
    [5408, 5440) '<unknown>'
    [5472, 5504) 'xi'
    [5536, 5568) 'yi'
    [5600, 5632) 'xi'
    [5664, 5696) 'yi'
    [5728, 5760) '<unknown>'
    [5792, 5824) '<unknown>'
    [5856, 5888) 'xi'
    [5920, 5952) 'yi'
    [5984, 6016) '<unknown>'
    [6048, 6128) 'ni' (line 8071)
    [6160, 6240) 'ni' (line 7237)
    [6272, 6352) 'max_loop_value' (line 7237)
    [6384, 6464) 'lhs_max' (line 7237)
    [6496, 6576) '<unknown>'
    [6608, 6688) '<unknown>'
    [6720, 6800) '<unknown>'
    [6832, 6944) 'op' (line 7507)
    [6976, 7088) 'op' (line 7587)
    [7120, 7232) 'op' (line 5268)
HINT: this may be a false positive if your program uses some custom stack
unwind mechanism, swapcontext or vfork
      (longjmp and C++ exceptions *are* supported)
SUMMARY: AddressSanitizer: stack-buffer-overflow
/home/worker/buildworker/tiber-gcc-asan/build/gcc/tree-vect-stmts.cc:13584 in
vect_is_simple_use(tree_node*, vec_info*, vect_def_type*, tree_node**,
_stmt_vec_info**, gimple**)
Shadow bytes around the buggy address:
  0x7f41ef71c400: 00 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2
  0x7f41ef71c480: 00 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2
  0x7f41ef71c500: 00 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2
  0x7f41ef71c580: 00 f2 f2 f2 00 f2 f2 f2 00 f2 f2 f2 00 00 f2 f2
  0x7f41ef71c600: 00 00 f2 f2 00 00 f2 f2 00 00 f2 f2 00 00 f2 f2
=>0x7f41ef71c680: 00 00 f2 f2 00 00 f2 f2 00 00 f2 f2 00 00 00[f2]
  0x7f41ef71c700: f2 f2 f2 f2 00 00 00 f2 f2 f2 f2 f2 00 00 00 f2
  0x7f41ef71c780: f2 f2 f2 f2 00 00 00 f2 f2 f2 f2 f2 00 00 00 f2
  0x7f41ef71c800: f2 f2 f2 f2 00 00 00 f2 f2 f2 f2 f2 00 00 00 f2
  0x7f41ef71c880: f2 f2 f2 f2 00 00 00 f2 f2 f2 f2 f2 00 00 00 f2
  0x7f41ef71c900: f2 f2 f2 f2 00 00 00 f2 f2 f2 f2 f2 00 00 00 f2
Shadow byte legend (one shadow byte represents 8 application bytes):
  Addressable:           00
  Partially addressable: 01 02 03 04 05 06 07 
  Heap left redzone:       fa
  Freed heap region:       fd
  Stack left redzone:      f1
  Stack mid redzone:       f2
  Stack right redzone:     f3
  Stack after return:      f5
  Stack use after scope:   f8
  Global redzone:          f9
  Global init order:       f6
  Poisoned by user:        f7
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==46365==ABORTING

=================================================================

Reply via email to