Directly constructed subprocess pipe protocols segfault when callbacks use a non-process owner
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 52/100
- Type d'issue
- Bug
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- python
- Domaine
- backend, operating-systems
Piste de recherche
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.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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.
- Langage dominant
- Cython
- Étoiles
- 11.9k
- Forks
- 615
- Métriques de merge des PR
- Aucune PR mergée en 30 j
Guide de contribution
Aucun guide de contribution indexé pour ce dépôt
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de MagicStack/uvloop
-
License not clear Ouverte
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
MagicStack/uvloop#759 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
MagicStack/uvloop#741 · 2 réactions ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 68/100
MagicStack/uvloop#702 · 8 commentaires · 9 réactions ·
-
Difficulté 4/5 3-5 jours Accessibilité débutants 25/100
MagicStack/uvloop#766 ·
-
Difficulté 3/5 1-2 jours Accessibilité débutants 68/100
MagicStack/uvloop#763 ·
Toutes les issues de MagicStack/uvloop
Issues similaires
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
mksglu/context-mode#1200 ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
-
clawsweeper:needs-maintainer-review clawsweeper:needs-product-decision clawsweeper:no-new-fix-pr impact:auth-provider issue-rating: 🌊 off-meta tidepool P2
Difficulté 1/5 Moins d'une heure Accessibilité débutants 80/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100