trevdatastreams's picture
Publish deterministic Arm NN parser-table OOB PoC
277dba7 verified
Raw
History Blame Contribute Delete
3.32 kB
=================================================================
==39142==ERROR: AddressSanitizer: heap-buffer-overflow on address 0x61a000000830 at pc 0x000100d30834 bp 0x00016f2fcbd0 sp 0x00016f2fcbc8
READ of size 8 at 0x61a000000830 thread T0
#0 0x000100d30830 in armnnDeserializer::IDeserializer::DeserializerImpl::CreateNetworkFromGraph(armnnSerializer::SerializedGraph const*)+0xed4 (libarmnnDeserializer.35.0.dylib:arm64+0x50830)
#1 0x000100b026a4 in main+0xa70 (harness:arm64+0x1000026a4)
#2 0x00018c2bfdfc in start+0x1b4c (dyld:arm64e+0x1fdfc)
0x61a000000830 is located 784 bytes after 1184-byte region [0x61a000000080,0x61a000000520)
allocated by thread T0 here:
#0 0x000101407f50 in _Znwm+0x74 (libclang_rt.asan_osx_dynamic.dylib:arm64e+0x4ff50)
#1 0x000100d5bd40 in std::__1::vector<void (armnnDeserializer::IDeserializer::DeserializerImpl::*)(armnnSerializer::SerializedGraph const*, unsigned int), std::__1::allocator<void (armnnDeserializer::IDeserializer::DeserializerImpl::*)(armnnSerializer::SerializedGraph const*, unsigned int)>>::__vallocate[abi:nqe210106](unsigned long)+0x44 (libarmnnDeserializer.35.0.dylib:arm64+0x7bd40)
#2 0x000100ce3cdc in armnnDeserializer::IDeserializer::DeserializerImpl::DeserializerImpl()+0x108 (libarmnnDeserializer.35.0.dylib:arm64+0x3cdc)
#3 0x000100ce1e38 in armnnDeserializer::IDeserializer::IDeserializer()+0x50 (libarmnnDeserializer.35.0.dylib:arm64+0x1e38)
#4 0x000100ce2138 in armnnDeserializer::IDeserializer::Create()+0x38 (libarmnnDeserializer.35.0.dylib:arm64+0x2138)
#5 0x000100b02648 in main+0xa14 (harness:arm64+0x100002648)
#6 0x00018c2bfdfc in start+0x1b4c (dyld:arm64e+0x1fdfc)
SUMMARY: AddressSanitizer: heap-buffer-overflow (libarmnnDeserializer.35.0.dylib:arm64+0x50830) in armnnDeserializer::IDeserializer::DeserializerImpl::CreateNetworkFromGraph(armnnSerializer::SerializedGraph const*)+0xed4
Shadow bytes around the buggy address:
0x61a000000580: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x61a000000600: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x61a000000680: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x61a000000700: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x61a000000780: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
=>0x61a000000800: fa fa fa fa fa fa[fa]fa fa fa fa fa fa fa fa fa
0x61a000000880: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x61a000000900: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x61a000000980: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x61a000000a00: fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa fa
0x61a000000a80: fa fa fa fa fa fa 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
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
==39142==ABORTING