Directly constructed subprocess pipe protocols segfault when callbacks use a non-process owner
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 4/5
- Tiempo estimado
- 3-5 días
- Aptitud para principiantes
- 52/100
- Tipo de issue
- Error
- Claridad
- Bastante claro
- Estado de actividad
- Activo
- Stack tecnológico
- python
- Área
- backend, operating-systems
Línea de trabajo
Start by reproducing the three constructor-and-callback cases for ReadSubprocessPipeProto and WriteSubprocessPipeProto, then inspect their generated callbacks in uvloop/loop.c at the reported locations. Use the ASan/UBSan findings to trace invalid owner access, and verify that each case raises a Python exception instead of terminating the interpreter.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
Summary
ReadSubprocessPipeProto and WriteSubprocessPipeProto accept ordinary integers as constructor arguments, after which the listed protocol callbacks terminate the interpreter.
I realize this is not a realistic input or usage pattern, but I would expect a Python exception rather than a process crash.
Versions
uvloop 0.22.1, CPython 3.12.3, Debian 12 x86_64, glibc 2.36
Reproducer
Each call below reproduces independently in a fresh process.
from uvloop.loop import ReadSubprocessPipeProto, WriteSubprocessPipeProto
ReadSubprocessPipeProto(1, 7).data_received(b"data")
WriteSubprocessPipeProto(1, 7).connection_lost(None)
WriteSubprocessPipeProto(1, 7).resume_writing()
Segmentation fault (core dumped)
ASan/UBSan result
I built uvloop 0.22.1 from source with Clang 18 using ASan and UBSan instrumentation.
ASan reports zero-page reads for data_received() and connection_lost() in their generated Cython callbacks:
ERROR: AddressSanitizer: SEGV on unknown address 0x0000000000e0
The signal is caused by a READ memory access.
#0 ReadSubprocessPipeProto.data_received
uvloop/loop.c:130047:177
SUMMARY: AddressSanitizer: SEGV
uvloop/loop.c:130047:177
The connection_lost() variant reports an equivalent read from address 0xd8 at uvloop/loop.c:129583.
For resume_writing(), UBSan first reports misaligned PyObject access in Py_INCREF at uvloop/loop.c:129886, and ASan then reports the resulting read fault.
The sanitizer processes exit with code 134 after ASan aborts.
I found this while fuzzing Python C extension modules.
- Lenguaje dominante
- Cython
- Estrellas
- 11.9k
- Forks
- 615
- Métricas de merge de PR
- Sin PR fusionados en 30 d
Guía de contribución
No hay ninguna guía de contribución indexada para este repositorio
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 MagicStack/uvloop
-
License not clear Abierto
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
MagicStack/uvloop#759 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
MagicStack/uvloop#741 · 2 reacciones ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
MagicStack/uvloop#702 · 8 comentarios · 9 reacciones ·
-
Dificultad 4/5 3-5 días Aptitud para principiantes 25/100
MagicStack/uvloop#766 ·
-
Dificultad 3/5 1-2 días Aptitud para principiantes 68/100
MagicStack/uvloop#763 ·
Todos los issues de MagicStack/uvloop
Issues similares
-
[Bug]: Discord Activity titles with emoji are rejected as over 80 characters when they are not Abiertoclawsweeper:linked-pr-open clawsweeper:no-new-fix-pr clawsweeper:source-repro impact:message-loss issue-rating: 🦞 diamond lobster maturity:stable P2
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
growthbook/growthbook#7100 ·
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
punkpeye/mcp-remote#369 ·
-
Client customer-reported needs-team-attention question Service Attention WebPubSub
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
Azure/azure-sdk-for-net#63292 · 3 comentarios · 1 reacción ·
-
bug p:3-mid pydanty:bug
Dificultad 2/5 1-3 horas Aptitud para principiantes 88/100
pydantic/pydantic-ai#8643 · 1 comentario ·