Views
No views yet
add_overflow_oob_min.circle is a 636-byte Circle FlatBuffer with an Add graph whose model-controlled shape is [1431655766, 3] and constant shape is [1, 3].1.30.1, circle2circle --expand_broadcast_const reaches luci::ExpandBroadcastConstPass. The pass multiplies output dimensions into a uint32_t allocation size, so 1431655766 * 3 wraps to 2. It then uses the original dimensions as loop/index bounds, writing past the two-float allocation and crashing with SIGSEGV.circle2circle path accepts and rewrites the artifact without crashing. The companion add_overflow_oob_min.tflite is the same FlatBuffer with TFL3 file identifier; one-import-tflite preserves the malformed shape, and the imported Circle artifact crashes the same optimizer pass.CIR0)onecc 1.30.1circle2circle --expand_broadcast_constone-import-tflite followed by circle2circle --expand_broadcast_const1.30.1 as the latest release at local verification time on 2026-05-12. The current upstream master source also still contained the same unchecked uint32_t constant_size multiplication in compiler/luci/pass/src/ExpandBroadcastConstPass.cpp.libluci_pass.so during luci::ExpandBroadcastConstPass::run(loco::Graph*), faulting on an indexed float store.add_overflow_oob_min.circle
16b35129a92c8250ef79bcbd5b834749af63d707917c7970d1da8a5720849a8fadd_overflow_oob_min.tflite
76a03afe7e6b4d664b73444911e57c54bb1c97b8e6f7f5e38c8f88cea461e147onecc 1.30.1, then run:1export ONE_ROOT=/path/to/onecc-1.30.1
2export PATH="$ONE_ROOT/bin:$PATH"
3export LD_LIBRARY_PATH="$ONE_ROOT/lib:${LD_LIBRARY_PATH:-}"
4
5python3 verify_circle_expand_broadcast_oob.py --one-root "$ONE_ROOT"circle2circle_default.returncode == 0circle2circle_expand_broadcast_const.returncode == -11 or shell status 139one_import_tflite.returncode == 0imported_circle2circle_expand_broadcast_const.returncode == -11 or shell status 1391circle2circle add_overflow_oob_min.circle /tmp/default.circle
2circle2circle --expand_broadcast_const add_overflow_oob_min.circle /tmp/expanded.circle0; the second should terminate with SIGSEGV.[1431655766, 3], leaves the constant shape as [1, 3], and stores three FLOAT32 values in the constant buffer.CIR0 to TFL3. This checks that the malformed shape can survive the supported TFLite import path before reaching Circle optimization.0.8.8 reported zero issues and skipped the .circle artifact as unsupported. This is supporting scanner/runtime mismatch evidence only; the primary impact is the native converter crash.1.30.1.libluci_pass.so during luci::ExpandBroadcastConstPass::run(loco::Graph*).ExpandBroadcastConstPass, but not this uint32_t constant_size wraparound leading to SIGSEGV. CVE-2026-41666 / PR #16481 is a separate runtime tensor memory-size calculation issue, not this converter-pass crash.