Printed out the address right before MariRSRecoveryDecoder.cpp:727, the
addr is 0x6250000002900, which is different from the address reported by
AdressSanitizer.
./fuzz/decode_fuzz_test: Running 1 inputs 1 time(s) each.
Running: crash-96da7f498ec50184b4a59ff76016825944944534
addr = 0x625000002900, it - begin = 0, capacity = 4, size = 3
addr = 0x625000002900, it - begin = 0, capacity = 4, size = 2
=================================================================
==61653==ERROR: AddressSanitizer: container-overflow on address
0x625000003992 at pc 0x00010cc8a126 bp 0x7fff52ff2fe0 sp 0x7fff52ff2fd8
READ of size 2 at 0x625000003992 thread T0
#0 0x10cc8a125 in CRsFecHeader::GetSourceBlockNumber() const
RsFecHeader.h:184
#1 0x10cc91fa3 in
CMariRSRecoveryDecoder::flushSrcPackets(CRsFecHeader&)
MariRSRecoveryDecoder.cpp:727
#2 0x10cc990dc in CMariRSRecoveryDecoder::recover(CRsFecHeader&)
MariRSRecoveryDecoder.cpp:650
#3 0x10cca058d in CMariRSRecoveryDecoder::receiveInd(unsigned int,
unsigned short, unsigned char const*, unsigned long, bool, unsigned int)
MariRSRecoveryDecoder.cpp:891
#4 0x10cc070d2 in LLVMFuzzerTestOneInput fec_decode_fuzz.cpp:42
#5 0x10cd07491 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*,
unsigned long) (decode_fuzz_test:x86_64+0x100102491)
#6 0x10ccdea1c in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*,
unsigned long) (decode_fuzz_test:x86_64+0x1000d9a1c)
#7 0x10ccea0bd in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned
char const*, unsigned long)) (decode_fuzz_test:x86_64+0x1000e50bd)
#8 0x10ccddc5f in main (decode_fuzz_test:x86_64+0x1000d8c5f)
#9 0x7fffc092a234 in start (libdyld.dylib:x86_64+0x5234)
0x625000003992 is located 4242 bytes inside of 8448-byte region
[0x625000002900,0x625000004a00)
allocated by thread T0 here:
#0 0x10e0d0162 (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x63162)
#1 0x10cccf735 in std::__1::__split_buffer<fecPacket,
std::__1::allocator<fecPacket>&>::__split_buffer(unsigned long, unsigned
long, std::__1::allocator<fecPacket>&) new:226
#2 0x10cccd8ab in std::__1::__split_buffer<fecPacket,
std::__1::allocator<fecPacket>&>::__split_buffer(unsigned long, unsigned
long, std::__1::allocator<fecPacket>&) __split_buffer:310
#3 0x10cccc915 in void std::__1::vector<fecPacket,
std::__1::allocator<fecPacket> >::__push_back_slow_path<fecPacket
const&>(fecPacket const&&&) vector:1567
#4 0x10cca0127 in CMariRSRecoveryDecoder::receiveInd(unsigned int,
unsigned short, unsigned char const*, unsigned long, bool, unsigned int)
vector:1588
#5 0x10cc070d2 in LLVMFuzzerTestOneInput fec_decode_fuzz.cpp:42
#6 0x10cd07491 in fuzzer::Fuzzer::ExecuteCallback(unsigned char const*,
unsigned long) (decode_fuzz_test:x86_64+0x100102491)
#7 0x10ccdea1c in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*,
unsigned long) (decode_fuzz_test:x86_64+0x1000d9a1c)
#8 0x10ccea0bd in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned
char const*, unsigned long)) (decode_fuzz_test:x86_64+0x1000e50bd)
#9 0x10ccddc5f in main (decode_fuzz_test:x86_64+0x1000d8c5f)
#10 0x7fffc092a234 in start (libdyld.dylib:x86_64+0x5234)
HINT: if you don't care about these errors you may set
ASAN_OPTIONS=detect_container_overflow=0.
If you suspect a false positive see also:
https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow.
SUMMARY: AddressSanitizer: container-overflow RsFecHeader.h:184 in
CRsFecHeader::GetSourceBlockNumber() const
Shadow bytes around the buggy address:
0x1c4a000006e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1c4a000006f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1c4a00000700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1c4a00000710: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
0x1c4a00000720: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
=>0x1c4a00000730: fc fc[fc]fc fc fc fc fc fc fc fc fc fc fc fc fc
0x1c4a00000740: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
0x1c4a00000750: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
0x1c4a00000760: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
0x1c4a00000770: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
0x1c4a00000780: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
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
==61653==ABORTING
==61653== ERROR: libFuzzer: deadly signal
#0 0x10e0cccf7 in __sanitizer_print_stack_trace
(libclang_rt.asan_osx_dynamic.dylib:x86_64+0x5fcf7)
#1 0x10cd0418b in fuzzer::Fuzzer::CrashCallback()
(decode_fuzz_test:x86_64+0x1000ff18b)
#2 0x10cd0413d in fuzzer::Fuzzer::StaticCrashSignalCallback()
(decode_fuzz_test:x86_64+0x1000ff13d)
#3 0x10cd69797 in fuzzer::CrashHandler(int, __siginfo*, void*)
(decode_fuzz_test:x86_64+0x100164797)
#4 0x7fffc0b39b39 in _sigtramp (libsystem_platform.dylib:x86_64+0x2b39)
#5 0x100000000
(/Users/jeromy/work/cisco/wme/vendor/mari/bld/unix/./fuzz/decode_fuzz_test:x86_64+0xf33fb000)
#6 0x7fffc09be41f in abort
(/usr/lib/system/libsystem_c.dylib:x86_64+0x5f41f)
#7 0x10e0e48e5 in __sanitizer_cov_pcs_init
(/Users/jeromy/work/playground/third_party/llvm-build/Release+Asserts/lib/clang/6.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib:x86_64+0x778e5)
#8 0x10e0e3853 in OnPrint
(/Users/jeromy/work/playground/third_party/llvm-build/Release+Asserts/lib/clang/6.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib:x86_64+0x76853)
#9 0x10e0c9d76 in __asan_on_error
(/Users/jeromy/work/playground/third_party/llvm-build/Release+Asserts/lib/clang/6.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib:x86_64+0x5cd76)
#10 0x10e0c97e1 in __asan_unpoison_intra_object_redzone
(/Users/jeromy/work/playground/third_party/llvm-build/Release+Asserts/lib/clang/6.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib:x86_64+0x5c7e1)
#11 0x10e0ca39a in __asan_report_load2
(/Users/jeromy/work/playground/third_party/llvm-build/Release+Asserts/lib/clang/6.0.0/lib/darwin/libclang_rt.asan_osx_dynamic.dylib:x86_64+0x5d39a)
#12 0x10cc8a125 in CRsFecHeader::GetSourceBlockNumber() const
(/Users/jeromy/work/cisco/wme/vendor/mari/bld/unix/./fuzz/decode_fuzz_test:x86_64+0x100085125)
#13 0x10cc91fa3 in
CMariRSRecoveryDecoder::flushSrcPackets(CRsFecHeader&)
(/Users/jeromy/work/cisco/wme/vendor/mari/bld/unix/./fuzz/decode_fuzz_test:x86_64+0x10008cfa3)
#14 0x10cc990dc in CMariRSRecoveryDecoder::recover(CRsFecHeader&)
(/Users/jeromy/work/cisco/wme/vendor/mari/bld/unix/./fuzz/decode_fuzz_test:x86_64+0x1000940dc)
#15 0x10cca058d in CMariRSRecoveryDecoder::receiveInd(unsigned int,
unsigned short, unsigned char const*, unsigned long, bool, unsigned int)
(/Users/jeromy/work/cisco/wme/vendor/mari/bld/unix/./fuzz/decode_fuzz_test:x86_64+0x10009b58d)
#16 0x10cc070d2 in LLVMFuzzerTestOneInput
(/Users/jeromy/work/cisco/wme/vendor/mari/bld/unix/./fuzz/decode_fuzz_test:x86_64+0x1000020d2)
#17 0x10cd07491 in fuzzer::Fuzzer::ExecuteCallback(unsigned char
const*, unsigned long)
(/Users/jeromy/work/cisco/wme/vendor/mari/bld/unix/./fuzz/decode_fuzz_test:x86_64+0x100102491)
#18 0x10ccdea1c in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*,
unsigned long)
(/Users/jeromy/work/cisco/wme/vendor/mari/bld/unix/./fuzz/decode_fuzz_test:x86_64+0x1000d9a1c)
#19 0x10ccea0bd in fuzzer::FuzzerDriver(int*, char***, int (*)(unsigned
char const*, unsigned long))
(/Users/jeromy/work/cisco/wme/vendor/mari/bld/unix/./fuzz/decode_fuzz_test:x86_64+0x1000e50bd)
#20 0x10ccddc5f in main
(/Users/jeromy/work/cisco/wme/vendor/mari/bld/unix/./fuzz/decode_fuzz_test:x86_64+0x1000d8c5f)
#21 0x7fffc092a234 in start
(/usr/lib/system/libdyld.dylib:x86_64+0x5234)
NOTE: libFuzzer has rudimentary signal handlers.
Combine libFuzzer with AddressSanitizer or similar for better crash
reports.
SUMMARY: libFuzzer: deadly signal
On Tuesday, August 22, 2017 at 5:30:28 PM UTC-7, Evgeniy Stepanov wrote:
>
> it - begin = 0, capacity = 4, size = 2
> 0x625000003992 is located 4242 bytes inside of 8448-byte region
> [0x625000002900,0x625000004a00)
>
> vector element size = 8448 / 4 = 2112 bytes
> offset 4242 belongs to the 3rd element, which is actually out of
> bounds when size == 2.
>
> Looks like a true positive.
>
> On Tue, Aug 22, 2017 at 5:26 PM, Jennifer Liu <[email protected]
> <javascript:>> wrote:
> > thanks a lot, looks like false positive, here is the output:
> >
> > ./fuzz/decode_fuzz_test crash-96da7f498ec50184b4a59ff76016825944944534
> >
> > INFO: Seed: 3163772972
> >
> > INFO: Loaded 1 modules (4395 guards): 4395 [0x1042ffcf0, 0x10430419c),
> >
> > ./fuzz/decode_fuzz_test: Running 1 inputs 1 time(s) each.
> >
> > Running: crash-96da7f498ec50184b4a59ff76016825944944534
> >
> > it - begin = 0, capacity = 4, size = 3
> >
> > it - begin = 0, capacity = 4, size = 2
> >
> > =================================================================
> >
> > ==19407==ERROR: AddressSanitizer: container-overflow on address
> > 0x625000003992 at pc 0x0001042011e6 bp 0x7fff5ba7c000 sp 0x7fff5ba7bff8
> >
> > READ of size 2 at 0x625000003992 thread T0
> >
> > #0 0x1042011e5 in CRsFecHeader::GetSourceBlockNumber() const
> > RsFecHeader.h:184
> >
> > #1 0x104208fe1 in
> CMariRSRecoveryDecoder::flushSrcPackets(CRsFecHeader&)
> > MariRSRecoveryDecoder.cpp:726
> >
> > #2 0x10421011c in CMariRSRecoveryDecoder::recover(CRsFecHeader&)
> > MariRSRecoveryDecoder.cpp:650
> >
> > #3 0x1042175cd in CMariRSRecoveryDecoder::receiveInd(unsigned int,
> > unsigned short, unsigned char const*, unsigned long, bool, unsigned int)
> > MariRSRecoveryDecoder.cpp:890
> >
> > #4 0x10417e192 in LLVMFuzzerTestOneInput fec_decode_fuzz.cpp:42
> >
> > #5 0x10427e4d1 in fuzzer::Fuzzer::ExecuteCallback(unsigned char
> const*,
> > unsigned long) (decode_fuzz_test:x86_64+0x1001024d1)
> >
> > #6 0x104255a5c in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*,
> > unsigned long) (decode_fuzz_test:x86_64+0x1000d9a5c)
> >
> > #7 0x1042610fd in fuzzer::FuzzerDriver(int*, char***, int
> (*)(unsigned
> > char const*, unsigned long)) (decode_fuzz_test:x86_64+0x1000e50fd)
> >
> > #8 0x104254c9f in main (decode_fuzz_test:x86_64+0x1000d8c9f)
> >
> > #9 0x7fffc092a234 in start (libdyld.dylib:x86_64+0x5234)
> >
> >
> > 0x625000003992 is located 4242 bytes inside of 8448-byte region
> > [0x625000002900,0x625000004a00)
> >
> > allocated by thread T0 here:
> >
> > #0 0x106414162 (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x63162)
> >
> > #1 0x104246775 in std::__1::__split_buffer<fecPacket,
> > std::__1::allocator<fecPacket>&>::__split_buffer(unsigned long, unsigned
> > long, std::__1::allocator<fecPacket>&) new:226
> >
> > #2 0x1042448eb in std::__1::__split_buffer<fecPacket,
> > std::__1::allocator<fecPacket>&>::__split_buffer(unsigned long, unsigned
> > long, std::__1::allocator<fecPacket>&) __split_buffer:310
> >
> > #3 0x104243955 in void std::__1::vector<fecPacket,
> > std::__1::allocator<fecPacket> >::__push_back_slow_path<fecPacket
> > const&>(fecPacket const&&&) vector:1567
> >
> > #4 0x104217167 in CMariRSRecoveryDecoder::receiveInd(unsigned int,
> > unsigned short, unsigned char const*, unsigned long, bool, unsigned int)
> > vector:1588
> >
> > #5 0x10417e192 in LLVMFuzzerTestOneInput fec_decode_fuzz.cpp:42
> >
> > #6 0x10427e4d1 in fuzzer::Fuzzer::ExecuteCallback(unsigned char
> const*,
> > unsigned long) (decode_fuzz_test:x86_64+0x1001024d1)
> >
> > #7 0x104255a5c in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*,
> > unsigned long) (decode_fuzz_test:x86_64+0x1000d9a5c)
> >
> > #8 0x1042610fd in fuzzer::FuzzerDriver(int*, char***, int
> (*)(unsigned
> > char const*, unsigned long)) (decode_fuzz_test:x86_64+0x1000e50fd)
> >
> > #9 0x104254c9f in main (decode_fuzz_test:x86_64+0x1000d8c9f)
> >
> > #10 0x7fffc092a234 in start (libdyld.dylib:x86_64+0x5234)
> >
> >
> > HINT: if you don't care about these errors you may set
> > ASAN_OPTIONS=detect_container_overflow=0.
> >
> > If you suspect a false positive see also:
> >
> https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow.
>
> >
> > SUMMARY: AddressSanitizer: container-overflow RsFecHeader.h:184 in
> > CRsFecHeader::GetSourceBlockNumber() const
> >
> > Shadow bytes around the buggy address:
> >
> > 0x1c4a000006e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> >
> > 0x1c4a000006f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> >
> > 0x1c4a00000700: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> >
> > 0x1c4a00000710: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> >
> > 0x1c4a00000720: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> >
> > =>0x1c4a00000730: fc fc[fc]fc fc fc fc fc fc fc fc fc fc fc fc fc
> >
> > 0x1c4a00000740: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
> >
> > 0x1c4a00000750: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
> >
> > 0x1c4a00000760: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
> >
> > 0x1c4a00000770: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
> >
> > 0x1c4a00000780: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
> >
> > 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
> >
> > ==19407==ABORTING
> >
> > ==19407== ERROR: libFuzzer: deadly signal
> >
> > #0 0x106410cf7 in __sanitizer_print_stack_trace
> > (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x5fcf7)
> >
> > #1 0x10427b1cb in fuzzer::Fuzzer::CrashCallback()
> > (decode_fuzz_test:x86_64+0x1000ff1cb)
> >
> > #2 0x10427b17d in fuzzer::Fuzzer::StaticCrashSignalCallback()
> > (decode_fuzz_test:x86_64+0x1000ff17d)
> >
> > #3 0x1042e07d7 in fuzzer::CrashHandler(int, __siginfo*, void*)
> > (decode_fuzz_test:x86_64+0x1001647d7)
> >
> > #4 0x7fffc0b39b39 in _sigtramp
> (libsystem_platform.dylib:x86_64+0x2b39)
> >
> > #5 0x7fff5ba7ae5f (<unknown module>)
> >
> > #6 0x7fffc09be41f in abort (libsystem_c.dylib:x86_64+0x5f41f)
> >
> > #7 0x1064288e5 (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x778e5)
> >
> > #8 0x106427853 (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x76853)
> >
> > #9 0x10640dd76 (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x5cd76)
> >
> > #10 0x10640d7e1 (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x5c7e1)
> >
> > #11 0x10640e39a in __asan_report_load2
> > (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x5d39a)
> >
> > #12 0x1042011e5 in CRsFecHeader::GetSourceBlockNumber() const
> > RsFecHeader.h:184
> >
> > #13 0x104208fe1 in
> > CMariRSRecoveryDecoder::flushSrcPackets(CRsFecHeader&)
> > MariRSRecoveryDecoder.cpp:726
> >
> > #14 0x10421011c in CMariRSRecoveryDecoder::recover(CRsFecHeader&)
> > MariRSRecoveryDecoder.cpp:650
> >
> > #15 0x1042175cd in CMariRSRecoveryDecoder::receiveInd(unsigned int,
> > unsigned short, unsigned char const*, unsigned long, bool, unsigned int)
> > MariRSRecoveryDecoder.cpp:890
> >
> > #16 0x10417e192 in LLVMFuzzerTestOneInput fec_decode_fuzz.cpp:42
> >
> > #17 0x10427e4d1 in fuzzer::Fuzzer::ExecuteCallback(unsigned char
> const*,
> > unsigned long) (decode_fuzz_test:x86_64+0x1001024d1)
> >
> > #18 0x104255a5c in fuzzer::RunOneTest(fuzzer::Fuzzer*, char const*,
> > unsigned long) (decode_fuzz_test:x86_64+0x1000d9a5c)
> >
> > #19 0x1042610fd in fuzzer::FuzzerDriver(int*, char***, int
> (*)(unsigned
> > char const*, unsigned long)) (decode_fuzz_test:x86_64+0x1000e50fd)
> >
> > #20 0x104254c9f in main (decode_fuzz_test:x86_64+0x1000d8c9f)
> >
> > #21 0x7fffc092a234 in start (libdyld.dylib:x86_64+0x5234)
> >
> >
> > NOTE: libFuzzer has rudimentary signal handlers.
> >
> > Combine libFuzzer with AddressSanitizer or similar for better
> crash
> > reports.
> >
> > SUMMARY: libFuzzer: deadly signal
> >
> >
> > On Tuesday, August 22, 2017 at 3:22:04 PM UTC-7, kcc wrote:
> >>
> >>
> >>
> >> On Tue, Aug 22, 2017 at 3:09 PM, Jennifer Liu <[email protected]>
> >> wrote:
> >>>
> >>> Thanks for taking look at this.
> >>>
> >>> asan should already be enabled for all libs and binaries. Here is the
> >>> output:
> >>
> >>
> >> I remember that container-overflow was more problematic on Mac
> (compared
> >> to Linux) since more libs are potentially uninstrumented.
> >>
> >> In this case, try to add a printf that shows .size() and .capacity() of
> >> the vector object at the time of acccess.
> >> i.e. print 4 values:
> >> v.begin()
> >> v.begin() + v.capacity()
> >> v.begin() + v.size()
> >> ptr // the pointer that causes the crash.
> >>
> >> if ptr is less than v.begin() + v.size() it's a false positive, as
> >> explained at
> >>
> https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow#false-positives
>
> >>
> >>
> >>>
> >>>
> >>> ==27158==ERROR: AddressSanitizer: container-overflow on address
> >>> 0x6250004b8992 at pc 0x00010f37fdf6 bp 0x7fff508fd5c0 sp
> 0x7fff508fd5b8
> >>> READ of size 2 at 0x6250004b8992 thread T0
> >>> #0 0x10f37fdf5 in CRsFecHeader::GetSourceBlockNumber() const
> >>> RsFecHeader.h:184
> >>> #1 0x10f3872a7 in
> >>> CMariRSRecoveryDecoder::flushSrcPackets(CRsFecHeader&)
> >>> MariRSRecoveryDecoder.cpp:722
> >>> #2 0x10f38e3ee in CMariRSRecoveryDecoder::recover(CRsFecHeader&)
> >>> MariRSRecoveryDecoder.cpp:649
> >>> #3 0x10f393365 in CMariRSRecoveryDecoder::receiveInd(unsigned int,
> >>> unsigned short, unsigned char const*, unsigned long, bool, unsigned
> int)
> >>> MariRSRecoveryDecoder.cpp:876
> >>> #4 0x10f2fd206 in LLVMFuzzerTestOneInput fec_decode_fuzz.cpp:42
> >>> #5 0x10f3f9a61 in fuzzer::Fuzzer::ExecuteCallback(unsigned char
> >>> const*, unsigned long) (decode_fuzz_test:x86_64+0x1000fea61)
> >>> #6 0x10f3f8553 in fuzzer::Fuzzer::RunOne(unsigned char const*,
> >>> unsigned long, bool, fuzzer::InputInfo*)
> >>> (decode_fuzz_test:x86_64+0x1000fd553)
> >>> #7 0x10f3ff200 in fuzzer::Fuzzer::MutateAndTestOne()
> >>> (decode_fuzz_test:x86_64+0x100104200)
> >>> #8 0x10f3ffac2 in fuzzer::Fuzzer::Loop()
> >>> (decode_fuzz_test:x86_64+0x100104ac2)
> >>> #9 0x10f3de11a in fuzzer::FuzzerDriver(int*, char***, int
> >>> (*)(unsigned char const*, unsigned long))
> >>> (decode_fuzz_test:x86_64+0x1000e311a)
> >>> #10 0x10f3d022f in main (decode_fuzz_test:x86_64+0x1000d522f)
> >>> #11 0x7fffc092a234 in start (libdyld.dylib:x86_64+0x5234)
> >>>
> >>> 0x6250004b8992 is located 4242 bytes inside of 8448-byte region
> >>> [0x6250004b7900,0x6250004b9a00)
> >>> allocated by thread T0 here:
> >>> #0 0x1107c7162
> (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x63162)
> >>> #1 0x10f3c1d05 in std::__1::__split_buffer<fecPacket,
> >>> std::__1::allocator<fecPacket>&>::__split_buffer(unsigned long,
> unsigned
> >>> long, std::__1::allocator<fecPacket>&) new:226
> >>> #2 0x10f3bfe7b in std::__1::__split_buffer<fecPacket,
> >>> std::__1::allocator<fecPacket>&>::__split_buffer(unsigned long,
> unsigned
> >>> long, std::__1::allocator<fecPacket>&) __split_buffer:310
> >>> #3 0x10f3beee5 in void std::__1::vector<fecPacket,
> >>> std::__1::allocator<fecPacket> >::__push_back_slow_path<fecPacket
> >>> const&>(fecPacket const&&&) vector:1567
> >>> #4 0x10f392f02 in CMariRSRecoveryDecoder::receiveInd(unsigned int,
> >>> unsigned short, unsigned char const*, unsigned long, bool, unsigned
> int)
> >>> vector:1588
> >>> #5 0x10f2fd206 in LLVMFuzzerTestOneInput fec_decode_fuzz.cpp:42
> >>> #6 0x10f3f9a61 in fuzzer::Fuzzer::ExecuteCallback(unsigned char
> >>> const*, unsigned long) (decode_fuzz_test:x86_64+0x1000fea61)
> >>> #7 0x10f3f8553 in fuzzer::Fuzzer::RunOne(unsigned char const*,
> >>> unsigned long, bool, fuzzer::InputInfo*)
> >>> (decode_fuzz_test:x86_64+0x1000fd553)
> >>> #8 0x10f3ff200 in fuzzer::Fuzzer::MutateAndTestOne()
> >>> (decode_fuzz_test:x86_64+0x100104200)
> >>> #9 0x10f3ffac2 in fuzzer::Fuzzer::Loop()
> >>> (decode_fuzz_test:x86_64+0x100104ac2)
> >>> #10 0x10f3de11a in fuzzer::FuzzerDriver(int*, char***, int
> >>> (*)(unsigned char const*, unsigned long))
> >>> (decode_fuzz_test:x86_64+0x1000e311a)
> >>> #11 0x10f3d022f in main (decode_fuzz_test:x86_64+0x1000d522f)
> >>> #12 0x7fffc092a234 in start (libdyld.dylib:x86_64+0x5234)
> >>>
> >>> HINT: if you don't care about these errors you may set
> >>> ASAN_OPTIONS=detect_container_overflow=0.
> >>> If you suspect a false positive see also:
> >>>
> https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow.
>
> >>> SUMMARY: AddressSanitizer: container-overflow RsFecHeader.h:184 in
> >>> CRsFecHeader::GetSourceBlockNumber() const
> >>> Shadow bytes around the buggy address:
> >>> 0x1c4a000970e0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> >>> 0x1c4a000970f0: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> >>> 0x1c4a00097100: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> >>> 0x1c4a00097110: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> >>> 0x1c4a00097120: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> >>> =>0x1c4a00097130: fc fc[fc]fc fc fc fc fc fc fc fc fc fc fc fc fc
> >>> 0x1c4a00097140: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
> >>> 0x1c4a00097150: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
> >>> 0x1c4a00097160: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
> >>> 0x1c4a00097170: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
> >>> 0x1c4a00097180: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
> >>> 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
> >>> ==27158==ABORTING
> >>> MS: 2 ChangeBinInt-CrossOver-; base unit:
> >>> 39df3a26431dc09379d257bc172adeab21071c68
> >>> artifact_prefix='./'; Test unit written to
> >>> ./crash-96da7f498ec50184b4a59ff76016825944944534
> >>> ==27158== ERROR: libFuzzer: deadly signal
> >>> #0 0x1107c3cf7 in __sanitizer_print_stack_trace
> >>> (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x5fcf7)
> >>> #1 0x10f3f675b in fuzzer::Fuzzer::CrashCallback()
> >>> (decode_fuzz_test:x86_64+0x1000fb75b)
> >>> #2 0x10f3f670d in fuzzer::Fuzzer::StaticCrashSignalCallback()
> >>> (decode_fuzz_test:x86_64+0x1000fb70d)
> >>> #3 0x10f45bd67 in fuzzer::CrashHandler(int, __siginfo*, void*)
> >>> (decode_fuzz_test:x86_64+0x100160d67)
> >>> #4 0x7fffc0b39b39 in _sigtramp
> >>> (libsystem_platform.dylib:x86_64+0x2b39)
> >>> #5 0x7fff508fc41f (<unknown module>)
> >>> #6 0x7fffc09be41f in abort (libsystem_c.dylib:x86_64+0x5f41f)
> >>> #7 0x1107db8e5
> (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x778e5)
> >>> #8 0x1107da853
> (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x76853)
> >>> #9 0x1107c0d76
> (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x5cd76)
> >>> #10 0x1107c07e1
> (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x5c7e1)
> >>> #11 0x1107c139a in __asan_report_load2
> >>> (libclang_rt.asan_osx_dynamic.dylib:x86_64+0x5d39a)
> >>> #12 0x10f37fdf5 in CRsFecHeader::GetSourceBlockNumber() const
> >>> RsFecHeader.h:184
> >>> #13 0x10f3872a7 in
> >>> CMariRSRecoveryDecoder::flushSrcPackets(CRsFecHeader&)
> >>> MariRSRecoveryDecoder.cpp:722
> >>> #14 0x10f38e3ee in CMariRSRecoveryDecoder::recover(CRsFecHeader&)
> >>> MariRSRecoveryDecoder.cpp:649
> >>> #15 0x10f393365 in CMariRSRecoveryDecoder::receiveInd(unsigned
> int,
> >>> unsigned short, unsigned char const*, unsigned long, bool, unsigned
> int)
> >>> MariRSRecoveryDecoder.cpp:876
> >>> #16 0x10f2fd206 in LLVMFuzzerTestOneInput fec_decode_fuzz.cpp:42
> >>> #17 0x10f3f9a61 in fuzzer::Fuzzer::ExecuteCallback(unsigned char
> >>> const*, unsigned long) (decode_fuzz_test:x86_64+0x1000fea61)
> >>> #18 0x10f3f8553 in fuzzer::Fuzzer::RunOne(unsigned char const*,
> >>> unsigned long, bool, fuzzer::InputInfo*)
> >>> (decode_fuzz_test:x86_64+0x1000fd553)
> >>> #19 0x10f3ff200 in fuzzer::Fuzzer::MutateAndTestOne()
> >>> (decode_fuzz_test:x86_64+0x100104200)
> >>> #20 0x10f3ffac2 in fuzzer::Fuzzer::Loop()
> >>> (decode_fuzz_test:x86_64+0x100104ac2)
> >>> #21 0x10f3de11a in fuzzer::FuzzerDriver(int*, char***, int
> >>> (*)(unsigned char const*, unsigned long))
> >>> (decode_fuzz_test:x86_64+0x1000e311a)
> >>> #22 0x10f3d022f in main (decode_fuzz_test:x86_64+0x1000d522f)
> >>> #23 0x7fffc092a234 in start (libdyld.dylib:x86_64+0x5234)
> >>>
> >>> NOTE: libFuzzer has rudimentary signal handlers.
> >>> Combine libFuzzer with AddressSanitizer or similar for better
> crash
> >>> reports.
> >>> SUMMARY: libFuzzer: deadly signal
> >>> MS: 2 ChangeBinInt-CrossOver-; base unit:
> >>> 39df3a26431dc09379d257bc172adeab21071c68
> >>> artifact_prefix='./'; Test unit written to
> >>> ./crash-96da7f498ec50184b4a59ff76016825944944534
> >>>
> >>>
> >>>
> >>> On Tuesday, August 22, 2017 at 12:44:53 PM UTC-7, Evgeniy Stepanov
> wrote:
> >>>>
> >>>> I don't know how common this algorithm is, given that it does N^2
> >>>> operations to remove N elements.
> >>>>
> >>>> But I don't see any container overflow here. Could you post the
> actual
> >>>> report?
> >>>>
> >>>> Does this look relevant to your setup:
> >>>>
> >>>>
> https://github.com/google/sanitizers/wiki/AddressSanitizerContainerOverflow#false-positives
>
> >>>>
> >>>> On Tue, Aug 22, 2017 at 11:54 AM, Jennifer Liu <[email protected]>
>
> >>>> wrote:
> >>>> > Is this false alarm of "container-overflow", it looks like very
> common
> >>>> > way
> >>>> > to remove elements by iterator in while loop.
> >>>> >
> >>>> >
> >>>> > std::vector<Packet>::iterator it = m_packets.begin();
> >>>> >
> >>>> > while (it != m_packets.end()) {
> >>>> >
> >>>> > if (it->header.GetSourceBlockNumber() <=
> >>>> > rsrp.GetSourceBlockNumber()) {
> >>>> >
> >>>> > if (it->repair.pData != NULL) {
> >>>> >
> >>>> > free(it->repair.pData);
> >>>> >
> >>>> > it->repair.pData = NULL;
> >>>> >
> >>>> > }
> >>>> >
> >>>> > it = m_packets.erase(it);
> >>>> >
> >>>> > } else {
> >>>> >
> >>>> > ++it;
> >>>> >
> >>>> > }
> >>>> >
> >>>> > }
> >>>> >
> >>>> >
> >>>> > Thanks
> >>>> >
> >>>> >
> >>>> > --
> >>>> > You received this message because you are subscribed to the Google
> >>>> > Groups
> >>>> > "address-sanitizer" group.
> >>>> > To unsubscribe from this group and stop receiving emails from it,
> send
> >>>> > an
> >>>> > email to [email protected].
> >>>> > For more options, visit https://groups.google.com/d/optout.
> >>>
> >>> --
> >>> You received this message because you are subscribed to the Google
> Groups
> >>> "address-sanitizer" group.
> >>> To unsubscribe from this group and stop receiving emails from it, send
> an
> >>> email to [email protected].
> >>> For more options, visit https://groups.google.com/d/optout.
> >>
> >>
> > --
> > You received this message because you are subscribed to the Google
> Groups
> > "address-sanitizer" group.
> > To unsubscribe from this group and stop receiving emails from it, send
> an
> > email to [email protected] <javascript:>.
> > For more options, visit https://groups.google.com/d/optout.
>
--
You received this message because you are subscribed to the Google Groups
"address-sanitizer" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.