This repository contains a minimal differential reproduction for a native
heap-buffer-overflow write in Arm NN's ONNX Unsqueeze parser.
1for(uint i = 0; i < dims.size(); i++)
2{
3 targetShape.insert(targetShape.begin() + armnn::numeric_cast<int>(dims[i]), 1);
4}
1./harness models/control-axis-zero.onnx
2
3ASAN_OPTIONS=abort_on_error=1:detect_leaks=0 \
4UBSAN_OPTIONS=print_stacktrace=1:halt_on_error=1 \
5./harness models/trigger-axis-eight.onnx
1ERROR: AddressSanitizer: heap-buffer-overflow
2WRITE of size 4
3 #2 armnnOnnxParser::OnnxParserImpl::ParseUnsqueeze(...)
40x... is located 24 bytes after 8-byte region [0x...,0x...)
5SUMMARY: AddressSanitizer: heap-buffer-overflow
Three interleaved control runs exited 0. Three trigger runs exited 134 with the
same sanitizer signature.
19a69aeeda881718fd5e10e0d3bdac1498920149fed04f707faae406475180437 control-axis-zero.onnx
24bad644776b7e848a571aa29a2425f67771eb8c405ed3ef0d35f10305d0e40c6 trigger-axis-eight.onnx