executor_runner segfaults in portable kernels when a .pte tensor has neither a data buffer nor a memory plan (null data pointer)
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 40/100
Línea de trabajo
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.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
🐛 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.
- Lenguaje dominante
- Python
- Estrellas
- 5.1k
- Forks
- 1.2k
- Merge medio
- 2 d 41 min
- PR fusionados (30 d)
- 683
Preparar el entorno
- Sin Dockerfile ni archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de pytorch/executorch
-
Windows: _get_flatc_path() looks for data/bin/flatc but the wheel ships flatc.exe (WinError 2)Posiblemente ocupada @ErenAta16 la tomó hoy. Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 83/100
pytorch/executorch#23989 ·
Los mantenedores suelen responder en 1 día
-
Portable remainder kernel: wrong sign for integers and float64 rounded to floatPosiblemente ocupada @JakeStevens la tomó hace 7 días. Abiertobug module: kernels triaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
pytorch/executorch#23682 · 2 asignados ·
Los mantenedores suelen responder en 1 día
-
enhancement triaged
Dificultad 2/5 Medio día Aptitud para principiantes 68/100
pytorch/executorch#21640 ·
Los mantenedores suelen responder en 1 día
-
[QNN] 16a4w_block stride-2 conv + ReLU fails HTP graph prepare on SM8850 (Relu16bParamsPlaceholder)Posiblemente ocupada @psiddh la tomó hace 3 días. Abiertobug module: qnn partner: qualcomm
pytorch/executorch#23922 · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
Cortex-M backend replaces channels-first dw conv with channels-last dw conv without handling the changed layout, fails at runtimePosiblemente ocupada @rahimuddin140 la tomó hace 3 días. Abiertobug module: microcontrollers partner: arm
Dificultad 4/5 3-5 días Aptitud para principiantes 38/100
pytorch/executorch#23812 · 2 comentarios · 1 reacción ·
Los mantenedores suelen responder en 1 día
Todos los issues de pytorch/executorch
Issues similares
-
good first issue tools
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
Los mantenedores suelen responder en 1 día
-
Commits pushed after #1095 merged did not land (ahmi/unified-nova-mcp-review-e095 @ 80fa23a)Abiertobug deferred domain:ci P1
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Los mantenedores suelen responder en 1 día
-
get_page_thumbnail modifies cached page images, affecting later thumbnails and picture exportsAbierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
docling-project/docling-mcp#147 ·
-
issue: A pipe model's Valves button ignores the Allow Chat Valves permissionPosiblemente ocupada Un pull request vinculado a esta issue está abierto o ya se fusionó. Abiertobug confirmed issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
open-webui/open-webui#32771 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
Scheduled Security Scan is failing on mainPosiblemente ocupada @pkupt la tomó hoy. Abiertosecurity-scan-failure
Dificultad 1/5 1-3 horas Aptitud para principiantes 74/100
semantica-agi/semantica#2045 ·
Los mantenedores suelen responder en 2 días