https://gcc.gnu.org/bugzilla/show_bug.cgi?id=82977
Bug ID: 82977 Summary: [8 Regression] AddressSanitizer: heap-use-after-free in strlen_optimize_stmt .././../gcc/tree-ssa-strlen.c:2971 Product: gcc Version: 7.0 Status: UNCONFIRMED Keywords: ice-on-valid-code Severity: normal Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: marxin at gcc dot gnu.org Target Milestone: --- Probably starting from Martin's r254630 sanitizer compiler produces: $ gcc -g -O2 cp-demangle.i ==22482==ERROR: AddressSanitizer: heap-use-after-free on address 0x611000000448 at pc 0x000000779828 bp 0x7fffec942150 sp 0x7fffec942148 READ of size 4 at 0x611000000448 thread T0 #0 0x779827 in std::pair<int, unsigned int>::operator=(std::pair<int, unsigned int> const&) /home/marxin/BIG/buildbot/slave/gcc-master-bootstrap-asan/build/builddir/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_pair.h:372 #1 0x779827 in hash_map<tree_node*, std::pair<int, unsigned int>, simple_hashmap_traits<default_hash_traits<tree_node*>, std::pair<int, unsigned int> > >::put(tree_node* const&, std::pair<int, unsigned int> const&) .././../gcc/hash-map.h:142 #2 0x779827 in strlen_optimize_stmt .././../gcc/tree-ssa-strlen.c:2971 #3 0x779827 in strlen_dom_walker::before_dom_children(basic_block_def*) .././../gcc/tree-ssa-strlen.c:3137 #4 0x2fc26b7 in dom_walker::walk(basic_block_def*) .././../gcc/domwalk.c:308 #5 0x1efb4c9 in execute .././../gcc/tree-ssa-strlen.c:3209 #6 0x174c5eb in execute_one_pass(opt_pass*) .././../gcc/passes.c:2497 #7 0x174ddc2 in execute_pass_list_1 .././../gcc/passes.c:2586 #8 0x174ddec in execute_pass_list_1 .././../gcc/passes.c:2587 #9 0x174de6b in execute_pass_list(function*, opt_pass*) .././../gcc/passes.c:2597 #10 0xea9e27 in cgraph_node::expand() .././../gcc/cgraphunit.c:2139 #11 0xeacb2a in expand_all_functions .././../gcc/cgraphunit.c:2275 #12 0xeacb2a in symbol_table::compile() .././../gcc/cgraphunit.c:2623 #13 0xeb3470 in symbol_table::compile() .././../gcc/cgraphunit.c:2719 #14 0xeb3470 in symbol_table::finalize_compilation_unit() .././../gcc/cgraphunit.c:2716 #15 0x1a04bcd in compile_file .././../gcc/toplev.c:480 #16 0x97ecd7 in do_compile .././../gcc/toplev.c:2060 #17 0x97ecd7 in toplev::main(int, char**) .././../gcc/toplev.c:2195 #18 0x9893c4 in main .././../gcc/main.c:39 #19 0x7fe5161e0f49 in __libc_start_main (/lib64/libc.so.6+0x20f49) #20 0x98a5c9 in _start (/home/marxin/BIG/buildbot/slave/gcc-master-bootstrap-asan/build/builddir/gcc/cc1+0x98a5c9) 0x611000000448 is located 72 bytes inside of 208-byte region [0x611000000400,0x6110000004d0) freed by thread T0 here: #0 0xa51240 in __interceptor_free ../../.././../libsanitizer/asan/asan_malloc_linux.cc:66 #1 0x1f10fcb in xcallocator<hash_map<tree_node*, std::pair<int, unsigned int>, simple_hashmap_traits<default_hash_traits<tree_node*>, std::pair<int, unsigned int> > >::hash_entry>::data_free(hash_map<tree_node*, std::pair<int, unsigned int>, simple_hashmap_traits<default_hash_traits<tree_node*>, std::pair<int, unsigned int> > >::hash_entry*) .././../gcc/hash-table.h:273 #2 0x1f10fcb in hash_table<hash_map<tree_node*, std::pair<int, unsigned int>, simple_hashmap_traits<default_hash_traits<tree_node*>, std::pair<int, unsigned int> > >::hash_entry, xcallocator>::expand() .././../gcc/hash-table.h:765 previously allocated by thread T0 here: #0 0xa5175c in __interceptor_calloc ../../.././../libsanitizer/asan/asan_malloc_linux.cc:95 #1 0x33f8e50 in xcalloc .././../libiberty/xmalloc.c:162 SUMMARY: AddressSanitizer: heap-use-after-free /home/marxin/BIG/buildbot/slave/gcc-master-bootstrap-asan/build/builddir/prev-x86_64-pc-linux-gnu/libstdc++-v3/include/bits/stl_pair.h:372 in std::pair<int, unsigned int>::operator=(std::pair<int, unsigned int> const&) Shadow bytes around the buggy address: 0x0c227fff8030: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c227fff8040: 00 00 00 00 00 00 00 00 00 00 fa fa fa fa fa fa 0x0c227fff8050: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00 0x0c227fff8060: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c227fff8070: 00 00 fa fa fa fa fa fa fa fa fa fa fa fa fa fa =>0x0c227fff8080: fd fd fd fd fd fd fd fd fd[fd]fd fd fd fd fd fd 0x0c227fff8090: fd fd fd fd fd fd fd fd fd fd fa fa fa fa fa fa 0x0c227fff80a0: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00 0x0c227fff80b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c227fff80c0: 00 00 fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c227fff80d0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 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 ==22482==ABORTING