runtime/executor: null-check backend_delegate_data#19904
Conversation
🔗 Helpful Links🧪 See artifacts and rendered test results at hud.pytorch.org/pr/pytorch/executorch/19904
Note: Links to docs will display an error until the docs builds have been completed. This comment was automatically generated by Dr. CI and updates every 15 minutes. |
This PR needs a
|
: null-check backend_delegate_data`runtime/executor: null-check backend_delegate_data
|
@claude Review this PR |
|
Claude finished @mergennachin's task in 1m 15s —— View job Review of PR #19904
Verdict: This PR looks good. The fix is correct, minimal, and well-tested. CorrectnessThe two null checks are properly placed and address real crash scenarios:
Using StyleThe code follows the existing patterns in TestThe test constructs a minimal FlatBuffer Minor observation (non-blocking)The test only covers the Overall: clean, focused fix that converts a SIGSEGV into a proper error return. LGTM. |
|
Please fix linter |
`backend_delegate_data` is an optional FlatBuffer vector — legitimately absent when no inline delegate blobs exist. The accessor dereferenced it without a null check, causing a SIGSEGV on any such PTE. Neither the FlatBuffer verifier nor validate_program catches this, so the crash was reachable under both Minimal and InternalConsistency verification. - Add `data_list != nullptr` guard; return `InvalidProgram` if absent. - Add `data != nullptr` guard on the per-entry data field. Continues the loader-hardening work in pytorch#16704, pytorch#18724, and pytorch#19267. Signed-off-by: Youngsik Yang <vacu9708@gmail.com>
b84e98c to
a52caf4
Compare
|
I've fixed the lint / build problem. |
This PR continues the loader-hardening work in #16704, #18724, and #19267.
Bug
backend_delegate_datais an optional FlatBuffer vector (schema/program.fbs:506, no(required)attribute).flowchart LR A["Method::load\nmethod.cpp:839"] -->|"for each BackendDelegate"| B["GetProcessedData\nmethod.cpp:193"] B -->|"location == INLINE"| C["get_backend_delegate_data\nprogram.cpp:534"] C -->|"backend_delegate_data() == null"| D["SIGSEGV"]Fix
Add a null guard before the existing size check:
backend_delegate_data()is nullInvalidProgramentry->data()is nullInvalidProgramInvalidProgramis used (rather thanNotFound) because an absentbackend_delegate_datawhile a delegate references inline data indicates a corrupt file, not a normal lookup miss. Happy to change if you preferNotFoundfor symmetry with the index check.The
GetProcessedDatafunction has two structurally parallel unguarded derefs (delegate.processed(),delegate.id()->c_str()); left for a follow-up to keep this PR focused.Tests
cc @larryliu0820 @JacobSzwejbka @lucylq