executor_runner segfaults in portable kernels when a .pte tensor has neither a data buffer nor a memory plan (null data pointer)
Mantenedores costumam responder em até 1 dia
Ninguém assumiu esta issue ainda.
Avaliação
- Dificuldade
- 4/5
- Tempo estimado
- 3-5 dias
- Facilidade para iniciantes
- 40/100
Direção de pesquisa
Start with the named pointer handling and execution paths in runtime/executor/tensor_parser_exec_aten.cpp, runtime/executor/method.cpp, and runtime/core/portable_type/tensor.h; reproduce with the supplied malformed .pte files in examples/portable/executor_runner. Compare rejecting tensors during load, validating pointers before execute, and checking accessors, including the additional overload and missing-key crashes in the issue. Done means malformed inputs fail cleanly instead of segfaulting; the issue leaves the preferred fix open.
Escrita pelo modelo de indexação a partir do texto da issue.
Descrição
🐛 Describe the bug
A .pte can declare a tensor with data_buffer_idx == 0 and no allocation_info. getTensorDataPtr (runtime/executor/tensor_parser_exec_aten.cpp:289-291 at main 897d28fe) accepts this case as "pointer received at runtime" and returns nullptr. If that tensor is not a plan input, nothing requires a data pointer to be supplied before Method::execute(): execute checks only input_set_ (method.cpp:1792-1799). The portable kernels then load or store through the null pointer (kernels/portable/cpu/util/dtype_util.h:20-27, elementwise_util.h:191), because Tensor::const_data_ptr / mutable_data_ptr (runtime/core/portable_type/tensor.h:135-153) do not check for null.
Reproduced on 2026-10-18 at main 897d28fe3094f27898115ebd65fecafdef5970cb (Linux x86_64, clang 21.1.8) with the shipped examples/portable/executor_runner --model_path <file>.pte. Seven fuzzer-generated .pte files (704 to 764 bytes each; all seven fault inside add_out) were run through three builds:
ASan+UBSan -O1 Release -O3 -DNDEBUG Release + logging
7 crafted .pte exit 1 exit 139 (SIGSEGV) exit 139
upstream add model exit 0 exit 0 exit 0
UBSan reports, for example:
kernels/portable/cpu/util/elementwise_util.h:191:11: runtime error: store to null pointer of type 'float'
kernels/portable/cpu/util/dtype_util.h:21:26: runtime error: load of null pointer of type 'const float'
... torch::executor::native::add_out(...)
... executorch::runtime::Method::execute_instruction() runtime/executor/method.cpp:1557:7
... executorch::runtime::Method::execute() runtime/executor/method.cpp:1844:21
... main examples/portable/executor_runner/executor_runner.cpp:856:28
I found #19269, which proposed a null check in the six Tensor data accessors to cover a large class of internal fuzzer crashes. It was closed without merging, and the accessors at 897d28fe still have no check. This report adds a file-only path to the same state: the .pte alone produces the null-data tensor, through the stock runner's default flow. Possible fixes are to reject such a tensor at load unless it is a plan input or output, to require output pointers to be set before execute(), or to add the accessor check from #19269. I am happy to send a PR for whichever you prefer.
Two smaller null dereferences on the same malformed-input path, also reproduced at 897d28fe with the shipped runner:
Method::execute_instructionformatsop->overload()->c_str()in the "KernelCall failed"ET_LOG(method.cpp:1565-1573) without thehas_overloadguard thatpopulate_operator_nameuses at load time (:756-768). A.ptewhose operator has no overload string, plus any kernel check failure, segfaults in an-O3 -DNDEBUGrunner built withEXECUTORCH_ENABLE_LOGGING=ON(exit 139; ASan: SEGV at address 0x4 instrlenviavsnprintffrommethod.cpp:1565). The same.ptewithout the kernel failure runs normally, and a kernel failure with the overload present exits cleanly with the logged error.get_named_data(extension/flat_tensor/flat_tensor_data_map.cpp:66) andFlatTensorDataMap::get_key(:263) callkey()->size()/key()->c_str()without a null check. A.ptdwith aNamedDataentry that omitskeysegfaults at address 0 inexecutor_runner --model_path ... --data_path ...(ASan:flat_tensor_data_map.cpp:66:50: runtime error: member call on null pointer of type 'flatbuffers::Vector<char>').
I have a small patch for these two, returning InvalidExternalData for a missing key and using "" for a missing overload. I can attach the crafted files, the controls, and the generator for the last two on request. Every run above recorded the SHA-256 of the binary and the input before and after.
Versions
main 897d28fe3094f27898115ebd65fecafdef5970cb (2026-10-18), built from source; Fedora 43 x86_64, clang 21.1.8, cmake 3.31.11. Release builds use -DCMAKE_BUILD_TYPE=Release (-O3 -DNDEBUG). Release v1.5.1 has the same source at these sites but was not run. (The template's collect_env.py output is not applicable to a C++ source build; paste it if the maintainers ask.)
Disclosure
AI tooling was used and assisted in the discovery and authoring of this issue.
- Linguagem predominante
- Python
- Estrelas
- 5.1k
- Forks
- 1.2k
- Merge médio
- 1d 22h
- PRs com merge (30d)
- 700
Preparar o ambiente
- Sem Dockerfile nem arquivo Docker Compose
- Tem um modelo de pull request
- Ler o guia de contribuição
Primeiros passos
- Leia a issue inteira e depois o guia de contribuição do projeto.
- Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
- Faça um fork do repositório e trabalhe em uma branch.
- Abra um pull request que referencie o número da issue.
Mais de pytorch/executorch
-
Windows: _get_flatc_path() looks for data/bin/flatc but the wheel ships flatc.exe (WinError 2)Talvez já em andamento @JacobSzwejbka assumiu hoje. Abertabug module: exir triaged
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 83/100
pytorch/executorch#23989 · 1 reação · 3 responsáveis ·
Mantenedores costumam responder em até 1 dia
-
Portable remainder kernel: wrong sign for integers and float64 rounded to floatTalvez já em andamento @JakeStevens assumiu há 9 dias. Abertabug module: kernels triaged
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
pytorch/executorch#23682 · 2 responsáveis ·
Mantenedores costumam responder em até 1 dia
-
enhancement triaged
Dificuldade 2/5 Meio dia Facilidade para iniciantes 68/100
pytorch/executorch#21640 ·
Mantenedores costumam responder em até 1 dia
-
[QNN] 16a4w_block stride-2 conv + ReLU fails HTP graph prepare on SM8850 (Relu16bParamsPlaceholder)Talvez já em andamento @psiddh assumiu há 5 dias. Abertabug module: qnn partner: qualcomm
pytorch/executorch#23922 · 1 responsável ·
Mantenedores costumam responder em até 1 dia
-
Cortex-M backend replaces channels-first dw conv with channels-last dw conv without handling the changed layout, fails at runtimeTalvez já em andamento @rahimuddin140 assumiu há 5 dias. Abertabug module: microcontrollers partner: arm
Dificuldade 4/5 3-5 dias Facilidade para iniciantes 38/100
pytorch/executorch#23812 · 2 comentários · 1 reação ·
Mantenedores costumam responder em até 1 dia
Todas as issues de pytorch/executorch
Issues semelhantes
-
bug good first issue
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 78/100
yunaremaia/proto-drift#22 ·
-
bug good first issue
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 82/100
yunaremaia/memwatch#96 ·
-
bug good first issue
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 91/100
yunaremaia/ci-gate-watch#34 ·
-
bug good first issue
Dificuldade 2/5 1-3 horas Facilidade para iniciantes 85/100
yunaremaia/agent-capability-attestation#64 ·
Mantenedores costumam responder em até 1 dia
-
bug good first issue
Dificuldade 1/5 Menos de uma hora Facilidade para iniciantes 86/100
yunaremaia/agent-call-graph#43 ·
Mantenedores costumam responder em até 1 dia