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

            Bug ID: 121697
           Summary: ASAN reports heap-use-after-free at
                    fortran/simplify.cc:133 when compiling
                    testsuite/gfortran.dg/pdt_39.f03
           Product: gcc
           Version: 16.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: fortran
          Assignee: unassigned at gcc dot gnu.org
          Reporter: jamborm at gcc dot gnu.org
                CC: pault at gcc dot gnu.org
            Blocks: 86656
  Target Milestone: ---
              Host: x86_64-linux-gnu
            Target: x86_64-linux-gnu

With an ASAN-instrumented GCC (commit d914cb6743d):

configure --enable-languages=c,c++,fortran --enable-host-shared
--enable-checking=release --disable-multilib --with-build-config=bootstrap-asan

running

ASAN_OPTIONS=detect_leaks=0 make -k check-gfortran
RUNTESTFLAGS="dg.exp=pdt_39.f03"

produces

==2452541==ERROR: AddressSanitizer: heap-use-after-free on address
0x7c90895ea0d8 at pc 0x000000ce4ab1 bp 0x7ffc5c3457f0 sp 0x7ffc5c3457e8
READ of size 8 at 0x7c90895ea0d8 thread T0
    #0 0x000000ce4ab0 in get_kind
/home/mjambor/gcc/mine/src/gcc/fortran/simplify.cc:133
    #1 0x000000d10f7c in gfc_simplify_real(gfc_expr*, gfc_expr*)
/home/mjambor/gcc/mine/src/gcc/fortran/simplify.cc:7547
    #2 0x000000ab83b1 in do_simplify
/home/mjambor/gcc/mine/src/gcc/fortran/intrinsic.cc:4895
    #3 0x000000ae91e1 in gfc_intrinsic_func_interface(gfc_expr*, int)
/home/mjambor/gcc/mine/src/gcc/fortran/intrinsic.cc:5298
    #4 0x000000ca839e in resolve_unknown_f
/home/mjambor/gcc/mine/src/gcc/fortran/resolve.cc:3079
    #5 0x000000ca839e in resolve_function
/home/mjambor/gcc/mine/src/gcc/fortran/resolve.cc:3506
    #6 0x000000ca9e7f in gfc_resolve_expr(gfc_expr*)
/home/mjambor/gcc/mine/src/gcc/fortran/resolve.cc:7987
    #7 0x0000009b91c1 in resolve_array_list
/home/mjambor/gcc/mine/src/gcc/fortran/array.cc:2210
    #8 0x0000009b91c1 in gfc_resolve_array_constructor(gfc_expr*)
/home/mjambor/gcc/mine/src/gcc/fortran/array.cc:2388
    #9 0x000000cabd27 in gfc_resolve_expr(gfc_expr*)
/home/mjambor/gcc/mine/src/gcc/fortran/resolve.cc:8019
    #10 0x0000009b91c1 in resolve_array_list
/home/mjambor/gcc/mine/src/gcc/fortran/array.cc:2210
    #11 0x0000009b91c1 in gfc_resolve_array_constructor(gfc_expr*)
/home/mjambor/gcc/mine/src/gcc/fortran/array.cc:2388
    #12 0x000000cabd27 in gfc_resolve_expr(gfc_expr*)
/home/mjambor/gcc/mine/src/gcc/fortran/resolve.cc:8019
    #13 0x000000cbee72 in resolve_actual_arglist
/home/mjambor/gcc/mine/src/gcc/fortran/resolve.cc:2074
    #14 0x000000ca5d08 in resolve_function
/home/mjambor/gcc/mine/src/gcc/fortran/resolve.cc:3425
    #15 0x000000ca9e7f in gfc_resolve_expr(gfc_expr*)
/home/mjambor/gcc/mine/src/gcc/fortran/resolve.cc:7987
    #16 0x000000c838a0 in gfc_resolve_code(gfc_code*, gfc_namespace*)
/home/mjambor/gcc/mine/src/gcc/fortran/resolve.cc:13684
    #17 0x000000c8f114 in resolve_codes
/home/mjambor/gcc/mine/src/gcc/fortran/resolve.cc:19626
    #18 0x000000c8f481 in gfc_resolve(gfc_namespace*)
/home/mjambor/gcc/mine/src/gcc/fortran/resolve.cc:19661
    #19 0x000000c4a906 in resolve_all_program_units
/home/mjambor/gcc/mine/src/gcc/fortran/parse.cc:7463
    #20 0x000000c4a906 in gfc_parse_file()
/home/mjambor/gcc/mine/src/gcc/fortran/parse.cc:7723
    #21 0x000000d6a630 in gfc_be_parse_file
/home/mjambor/gcc/mine/src/gcc/fortran/f95-lang.cc:247
    #22 0x000002469088 in compile_file
/home/mjambor/gcc/mine/src/gcc/toplev.cc:453
    #23 0x00000084dca1 in do_compile
/home/mjambor/gcc/mine/src/gcc/toplev.cc:2222
    #24 0x00000084dca1 in toplev::main(int, char**)
/home/mjambor/gcc/mine/src/gcc/toplev.cc:2385
    #25 0x000000859a49 in main /home/mjambor/gcc/mine/src/gcc/main.cc:39
    #26 0x7f208a22b37a in __libc_start_call_main (/lib64/libc.so.6+0x2b37a)
(BuildId: 5f5a89c70625d4fc059c9e954c047f21fa5104d7)
    #27 0x7f208a22b44a in __libc_start_main_impl (/lib64/libc.so.6+0x2b44a)
(BuildId: 5f5a89c70625d4fc059c9e954c047f21fa5104d7)
    #28 0x00000085bd34 in _start ../sysdeps/x86_64/start.S:115

0x7c90895ea0d8 is located 728 bytes inside of 736-byte region
[0x7c90895e9e00,0x7c90895ea0e0)
freed by thread T0 here:
    #0 0x000000940a3f in free
/home/mjambor/gcc/mine/src/libsanitizer/asan/asan_malloc_linux.cpp:51
    #1 0x000000a7533e in gfc_free_ref_list(gfc_ref*)
/home/mjambor/gcc/mine/src/gcc/fortran/expr.cc:646

previously allocated by thread T0 here:
    #0 0x0000009416cf in calloc
/home/mjambor/gcc/mine/src/libsanitizer/asan/asan_malloc_linux.cpp:74
    #1 0x00000678d974 in xcalloc
/home/mjambor/gcc/mine/src/libiberty/xmalloc.c:164

SUMMARY: AddressSanitizer: heap-use-after-free
/home/mjambor/gcc/mine/src/gcc/fortran/simplify.cc:133 in get_kind
Shadow bytes around the buggy address:
  0x7c90895e9e00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x7c90895e9e80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x7c90895e9f00: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x7c90895e9f80: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
  0x7c90895ea000: fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd fd
=>0x7c90895ea080: fd fd fd fd fd fd fd fd fd fd fd[fd]fa fa fa fa
  0x7c90895ea100: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x7c90895ea180: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x7c90895ea200: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x7c90895ea280: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x7c90895ea300: 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
==2452541==ABORTING
compiler exited with status 1
FAIL: gfortran.dg/pdt_39.f03   -O0   3 blank line(s) in output


...and similar on other optimization levels/compiler switch
combinations.

The failure seems to be introduced along with the testcase itself in
r16-3308-g243b5b23c7e60a (Paul Thomas: Fortran: gfortran PDT component
access [PR84122, PR85942])


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=86656
[Bug 86656] [meta-bug] Issues found with -fsanitize=address
  • [Bug fortran/121697] New: ASAN r... jamborm at gcc dot gnu.org via Gcc-bugs

Reply via email to