Skip to content

Libav fuzzing is not working like it should #18

Description

@mikkoyli

Libav fuzzing starts getting heap-buffer-overflow pretty quickly. It doesn't seem to be a problem in libav but in libav_fuzzer.

==9==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x611000008320 at pc 0x0000017a3725 bp 0x7ffd5acb0eb0 sp 0x7ffd5acb0ea8
READ of size 4 at 0x611000008320 thread T0
    #0 0x17a3724 in get_bits /src/libav/libavcodec/get_bits.h:232:5
    #1 0x17a3724 in mp_decode_layer3 /src/libav/libavcodec/mpegaudiodec_template.c:1492
    #2 0x17a3724 in mp_decode_frame /src/libav/libavcodec/mpegaudiodec_template.c:1549
    #3 0x178e4d3 in decode_frame /src/libav/libavcodec/mpegaudiodec_template.c:1646:11
    #4 0x1df71b4 in avcodec_decode_audio4 /src/libav/libavcodec/utils.c:1638:15
    #5 0x22f578a in LLVMFuzzerTestOneInput (/src/libav/libav_fuzzer+0x22f578a)
    #6 0x4ff8cc in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) /src/Fuzzer/FuzzerLoop.cpp:490:13
    #7 0x4ff100 in fuzzer::Fuzzer::RunOne(unsigned char const*, unsigned long) /src/Fuzzer/FuzzerLoop.cpp:446:3
    #8 0x4ff982 in fuzzer::Fuzzer::RunOneAndUpdateCorpus(unsigned char const*, unsigned long) /src/Fuzzer/FuzzerLoop.cpp:467:7
    #9 0x500e87 in fuzzer::Fuzzer::MutateAndTestOne() /src/Fuzzer/FuzzerLoop.cpp:682:5
    #10 0x5013f7 in fuzzer::Fuzzer::Loop() /src/Fuzzer/FuzzerLoop.cpp:770:5
    #11 0x4fa4e8 in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned char const*, unsigned long)) /src/Fuzzer/FuzzerDriver.cpp:416:5
    #12 0x4f8a60 in main /src/Fuzzer/FuzzerMain.cpp:21:10
    #13 0x7f66d754b82f in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x2082f)
    #14 0x4245c8 in _start (/src/libav/libav_fuzzer+0x4245c8)

0x611000008320 is located 1 bytes to the right of 223-byte region [0x611000008240,0x61100000831f)
allocated by thread T0 here:
    #0 0x4f5e40 in operator new[](unsigned long) (/src/libav/libav_fuzzer+0x4f5e40)
    #1 0x4ff86d in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*, unsigned long) /src/Fuzzer/FuzzerLoop.cpp:483:39

SUMMARY: AddressSanitizer: heap-buffer-overflow /src/libav/libavcodec/get_bits.h:232:5 in get_bits
Shadow bytes around the buggy address:
  0x0c227fff9010: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c227fff9020: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c227fff9030: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
  0x0c227fff9040: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
  0x0c227fff9050: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x0c227fff9060: 00 00 00 07[fa]fa fa fa fa fa fa fa fa fa fa fa
  0x0c227fff9070: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c227fff9080: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 fa fa
  0x0c227fff9090: fa fa fa fa fa fa fa fa 00 00 00 00 00 00 00 00
  0x0c227fff90a0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
  0x0c227fff90b0: 00 00 00 00 00 00 fa fa fa fa fa fa fa fa fa fa
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
  Container overflow:      fc
  Array cookie:            ac
  Intra object redzone:    bb
  ASan internal:           fe
  Left alloca redzone:     ca
  Right alloca redzone:    cb
==9==ABORTING

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions