Add bounds check for constant_data offset#19285
Conversation
Summary: Validate that `constant_data_offset->offset()` does not exceed `constant_data_size` before computing `constant_data_ptr + offset` in `getConstantDataPtr()`. Previously, the offset read from the flatbuffer was used in pointer arithmetic with no validation. A crafted XNNPACK delegate blob could set an arbitrary offset, causing an out-of-bounds read relative to `constant_data_ptr`. The main ExecuTorch runtime already performs this check in `program.cpp:get_constant_buffer_data()` — the XNNPACK backend was missing the equivalent. Thread `constant_data_size` from the `XNNHeader` (which already parses and validates it) through `compileModel()` → `defineTensor()` → `getConstantDataPtr()`. MACA-2026-001 (T267371218). Differential Revision: D103467781
🔗 Helpful Links🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/19285
Note: Links to docs will display an error until the docs builds have been completed. ❗ 1 Active SEVsThere are 1 currently active SEVs. If your PR is affected, please view them below: ❌ 2 New Failures, 4 Unrelated FailuresAs of commit ae4ce19 with merge base 2050b8a ( NEW FAILURES - The following jobs have failed:
FLAKY - The following job failed but was likely due to flakiness present on trunk:
BROKEN TRUNK - The following jobs failed but was present on the merge base:👉 Rebase onto the `viable/strict` branch to avoid these failures
This comment was automatically generated by Dr. CI and updates every 15 minutes. |
|
@rascani has exported this pull request. If you are a Meta employee, you can view the originating Diff in D103467781. |
This PR needs a
|
Summary:
Validate that
constant_data_offset->offset()does not exceedconstant_data_sizebefore computingconstant_data_ptr + offsetingetConstantDataPtr().Previously, the offset read from the flatbuffer was used in pointer arithmetic with no validation. A crafted XNNPACK delegate blob could set an arbitrary offset, causing an out-of-bounds read relative to
constant_data_ptr. The main ExecuTorch runtime already performs this check inprogram.cpp:get_constant_buffer_data()— the XNNPACK backend was missing the equivalent.Thread
constant_data_sizefrom theXNNHeader(which already parses and validates it) throughcompileModel()→defineTensor()→getConstantDataPtr().MACA-2026-001 (T267371218).
Differential Revision: D103467781