http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59362
Markus Trippelsdorf <octoploid at yandex dot com> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |octoploid at yandex dot com --- Comment #1 from Markus Trippelsdorf <octoploid at yandex dot com> --- Valgrind shows: ==3073== Invalid write of size 8 ==3073== at 0x8C60BF: collect_object_sizes_for(object_size_info*, tree_node*) (tree-object-size.c:913) ==3073== by 0x8C6CA4: merge_object_sizes(object_size_info*, tree_node*, tree_node*, unsigned long) [clone .isra.26] (tree-object-size.c:745) ==3073== by 0x8C68BA: collect_object_sizes_for(object_size_info*, tree_node*) (tree-object-size.c:956) ==3073== by 0x8C5188: compute_builtin_object_size(tree_node*, int) (tree-object-size.c:539) ==3073== by 0x5BACA7: fold_builtin_2(unsigned int, tree_node*, tree_node*, tree_node*, bool) (builtins.c:12721) ==3073== by 0x5BBBAB: fold_builtin_n(unsigned int, tree_node*, tree_node**, int, bool) (builtins.c:11118) ==3073== by 0x5C3F54: fold_call_stmt(gimple_statement_base*, bool) (builtins.c:14252) ==3073== by 0x8C43A6: (anonymous namespace)::pass_object_sizes::execute() (tree-object-size.c:1224) ==3073== by 0x7CC189: execute_one_pass(opt_pass*) (passes.c:2215) ==3073== by 0x7CC3F5: execute_pass_list(opt_pass*) (passes.c:2268) ==3073== by 0x7CC407: execute_pass_list(opt_pass*) (passes.c:2269) ==3073== by 0x5FCB95: expand_function(cgraph_node*) (cgraphunit.c:1763) ==3073== Address 0x53a8bc8 is 0 bytes after a block of size 856 alloc'd ==3073== at 0x40274F0: malloc (vg_replace_malloc.c:291) ==3073== by 0xD38CC7: xmalloc (xmalloc.c:147) ==3073== by 0x8C4182: init_object_sizes() [clone .part.28] (tree-object-size.c:1183) ==3073== by 0x8C4B83: (anonymous namespace)::pass_object_sizes::execute() (ssa-iterators.h:498) ==3073== by 0x7CC189: execute_one_pass(opt_pass*) (passes.c:2215) ==3073== by 0x7CC3F5: execute_pass_list(opt_pass*) (passes.c:2268) ==3073== by 0x7CC407: execute_pass_list(opt_pass*) (passes.c:2269) ==3073== by 0x5FCB95: expand_function(cgraph_node*) (cgraphunit.c:1763) ==3073== by 0x5FE477: compile() (cgraphunit.c:1868) ==3073== by 0x5FE7D4: finalize_compilation_unit() (cgraphunit.c:2280) ==3073== by 0x51E92B: c_write_global_declarations() (c-decl.c:10388) ==3073== by 0x866B7C: compile_file() (toplev.c:561) ==3073== ==3073== Invalid read of size 8 ==3073== at 0x8C6535: collect_object_sizes_for(object_size_info*, tree_node*) (tree-object-size.c:799) ==3073== by 0x8C6CA4: merge_object_sizes(object_size_info*, tree_node*, tree_node*, unsigned long) [clone .isra.26] (tree-object-size.c:745) ==3073== by 0x8C68BA: collect_object_sizes_for(object_size_info*, tree_node*) (tree-object-size.c:956) ==3073== by 0x8C5188: compute_builtin_object_size(tree_node*, int) (tree-object-size.c:539) ==3073== by 0x5BACA7: fold_builtin_2(unsigned int, tree_node*, tree_node*, tree_node*, bool) (builtins.c:12721) ==3073== by 0x5BBBAB: fold_builtin_n(unsigned int, tree_node*, tree_node**, int, bool) (builtins.c:11118) ==3073== by 0x5C3F54: fold_call_stmt(gimple_statement_base*, bool) (builtins.c:14252) ==3073== by 0x8C43A6: (anonymous namespace)::pass_object_sizes::execute() (tree-object-size.c:1224) ==3073== by 0x7CC189: execute_one_pass(opt_pass*) (passes.c:2215) ==3073== by 0x7CC3F5: execute_pass_list(opt_pass*) (passes.c:2268) ==3073== by 0x7CC407: execute_pass_list(opt_pass*) (passes.c:2269) ==3073== by 0x5FCB95: expand_function(cgraph_node*) (cgraphunit.c:1763) ==3073== Address 0x53a8bc8 is 0 bytes after a block of size 856 alloc'd ==3073== at 0x40274F0: malloc (vg_replace_malloc.c:291) ==3073== by 0xD38CC7: xmalloc (xmalloc.c:147) ==3073== by 0x8C4182: init_object_sizes() [clone .part.28] (tree-object-size.c:1183) ==3073== by 0x8C4B83: (anonymous namespace)::pass_object_sizes::execute() (ssa-iterators.h:498) ==3073== by 0x7CC189: execute_one_pass(opt_pass*) (passes.c:2215) ==3073== by 0x7CC3F5: execute_pass_list(opt_pass*) (passes.c:2268) ==3073== by 0x7CC407: execute_pass_list(opt_pass*) (passes.c:2269) ==3073== by 0x5FCB95: expand_function(cgraph_node*) (cgraphunit.c:1763) ==3073== by 0x5FE477: compile() (cgraphunit.c:1868) ==3073== by 0x5FE7D4: finalize_compilation_unit() (cgraphunit.c:2280) ==3073== by 0x51E92B: c_write_global_declarations() (c-decl.c:10388) ==3073== by 0x866B7C: compile_file() (toplev.c:561) ==3073== AddressSanitizer: markus@x4 tmp % /var/tmp/gcc_sani/usr/local/bin/gcc -c -O2 -std=gnu99 bug124.c ================================================================= ==2994==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x6180001343d8 at pc 0x133f0e8 bp 0x7fffe70fc990 sp 0x7fffe70fc988 WRITE of size 8 at 0x6180001343d8 thread T0 #0 0x133f0e7 in collect_object_sizes_for(object_size_info*, tree_node*) /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/tree-object-size.c:913 #1 0x133f7d9 in merge_object_sizes(object_size_info*, tree_node*, tree_node*, unsigned long) /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/tree-object-size.c:745 #2 0x133d495 in collect_object_sizes_for(object_size_info*, tree_node*) /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/tree-object-size.c:956 #3 0x13363b3 in compute_builtin_object_size(tree_node*, int) /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/tree-object-size.c:539 #4 0x7f8a05 in fold_builtin_object_size(tree_node*, tree_node*) /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/builtins.c:12721 #5 0x827a3e in fold_builtin_2(unsigned int, tree_node*, tree_node*, tree_node*, bool) /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/builtins.c:10905 #6 0x82aa3e in fold_builtin_n(unsigned int, tree_node*, tree_node**, int, bool) /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/builtins.c:11118 #7 0x855478 in fold_call_stmt(gimple_statement_base*, bool) /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/builtins.c:14252 #8 0x13322c8 in compute_object_sizes /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/tree-object-size.c:1224 #9 0x13322c8 in (anonymous namespace)::pass_object_sizes::execute() /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/tree-object-size.c:1309 #10 0xfe37f9 in execute_one_pass(opt_pass*) /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/passes.c:2215 #11 0xfe41b8 in execute_pass_list(opt_pass*) /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/passes.c:2268 #12 0xfe41de in execute_pass_list(opt_pass*) /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/passes.c:2269 #13 0x918b09 in expand_function(cgraph_node*) /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/cgraphunit.c:1763 #14 0x91de51 in expand_all_functions /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/cgraphunit.c:1868 #15 0x91de51 in compile() /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/cgraphunit.c:2203 #16 0x91f66a in finalize_compilation_unit() /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/cgraphunit.c:2280 #17 0x5e0a6c in c_write_global_declarations() /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/c/c-decl.c:10388 #18 0x11c8c44 in compile_file() /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/toplev.c:561 #19 0x11cd6d3 in do_compile /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/toplev.c:1893 #20 0x11cd6d3 in toplev_main(int, char**) /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/toplev.c:1969 #21 0x7fde5bff3f8f in __libc_start_main (/lib/libc.so.6+0x1ff8f) #22 0x5996d0 in _start (/var/tmp/gcc_sani/usr/local/libexec/gcc/x86_64-unknown-linux-gnu/4.9.0/cc1+0x5996d0) 0x6180001343d8 is located 0 bytes to the right of 856-byte region [0x618000134080,0x6180001343d8) allocated by thread T0 here: #0 0x7fde5c815824 in __interceptor_malloc (/usr/lib/gcc/x86_64-pc-linux-gnu/4.9.0/libasan.so.1+0x38824) #1 0x222c717 in xmalloc /var/tmp/gcc_build_dir/libiberty/../../gcc/libiberty/xmalloc.c:147 SUMMARY: AddressSanitizer: heap-buffer-overflow /var/tmp/gcc_build_dir/gcc/../../gcc/gcc/tree-object-size.c:913 collect_object_sizes_for(object_size_info*, tree_node*) Shadow bytes around the buggy address: 0x0c308001e820: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c308001e830: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c308001e840: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c308001e850: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c308001e860: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 =>0x0c308001e870: 00 00 00 00 00 00 00 00 00 00 00[fa]fa fa fa fa 0x0c308001e880: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa 0x0c308001e890: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c308001e8a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c308001e8b0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 0x0c308001e8c0: 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 Heap right redzone: fb Freed heap region: fd Stack left redzone: f1 Stack mid redzone: f2 Stack right redzone: f3 Stack partial redzone: f4 Stack after return: f5 Stack use after scope: f8 Global redzone: f9 Global init order: f6 Poisoned by user: f7 ASan internal: fe ==2994==ABORTING