python / python/cpython

`mmap.mmap.__setitem__` crashes when concurrently resized

Offen
#157,335 3 Kommentare 0 Reaktionen 0 zugewiesene Personen Auf GitHub ansehen

Dieses Issue hat noch niemand übernommen.

extension-modules type-bug
Vorherrschende Sprache
Python
Sterne
77.2k
Forks
35.9k
PR-Merge-Kennzahlen
PR-Kennzahlen ausstehend

Beschreibung

Bug report

Bug description:
import mmap
mm = mmap.mmap(-1, 100000)         
class mid:
    def __index__(self):
        mm.resize(8)           
        return 0
mm[90000] = mid()          

AddressSanitizer:DEADLYSIGNAL

==1==ERROR: AddressSanitizer: SEGV on unknown address 0xffffa1a0cf90 (pc 0xffffa1a2aff0 bp 0xffffd2152970 sp 0xffffd2152830 T0)
==1==The signal is caused by a WRITE memory access.
#0 0xffffa1a2aff0 in safe_byte_copy Modules/mmapmodule.c:406
#1 0xffffa1a2aff0 in mmap_ass_subscript_lock_held Modules/mmapmodule.c:1692
#2 0xffffa1a2aff0 in mmap_ass_subscript Modules/mmapmodule.c:1750
#3 0xaaaadf0a9860 in _PyEval_EvalFrameDefault Python/generated_cases.c.h:12634
#4 0xaaaadf970b1c in _PyEval_EvalFrame Include/internal/pycore_ceval.h:122
#5 0xaaaadf970b1c in _PyEval_Vector Python/ceval.c:2174
#6 0xaaaadf970b1c in PyEval_EvalCode Python/ceval.c:679
#7 0xaaaadfb6feb4 in run_mod Python/pythonrun.c:1509
#8 0xaaaadfb70d38 in _PyRun_File Python/pythonrun.c:1332
#9 0xaaaadfb74ffc in _PyRun_SimpleFile Python/pythonrun.c:544
#10 0xaaaadfb78dd0 in _PyRun_AnyFile Python/pythonrun.c:92
#11 0xaaaadfc4390c in pymain_run_file_obj Modules/main.c:478
#12 0xaaaadfc4390c in pymain_run_file Modules/main.c:494
#13 0xaaaadfc4390c in pymain_run_python Modules/main.c:804
#14 0xaaaadfc4390c in Py_RunMain Modules/main.c:891
#15 0xaaaadfc45c38 in pymain_main Modules/main.c:921
#16 0xaaaadfc45c38 in Py_BytesMain Modules/main.c:945
#17 0xffffa46f84c0 (/lib/aarch64-linux-gnu/libc.so.6+0x284c0) (BuildId: 27027b96e5b8c475fc327aa445bea1c71d37b4e2)
#18 0xffffa46f8594 in __libc_start_main (/lib/aarch64-linux-gnu/libc.so.6+0x28594) (BuildId: 27027b96e5b8c475fc327aa445bea1c71d37b4e2)
#19 0xaaaadf0ebeec in _start (/src/cpython/python+0x183beec) (BuildId: eba909a3db0adabacf151d7dc3081dda7999191a)

AddressSanitizer can not provide additional info.
SUMMARY: AddressSanitizer: SEGV Modules/mmapmodule.c:406 in safe_byte_copy
==1==ABORTING

CPython versions tested on:

CPython main branch

Operating systems tested on:

Linux

Linked PRs
  • gh-157438

Beitragsleitfaden

Beitragsleitfaden öffnen

Erste Schritte

  1. Lies das ganze Issue und danach den Beitragsleitfaden des Projekts.
  2. Schreib ins Issue, dass du es übernimmst — das erspart doppelte Arbeit.
  3. Forke das Repository und arbeite in einem Branch.
  4. Öffne einen Pull Request, der die Issue-Nummer nennt.

Rechercherichtung

Beginne mit dem Reproducer und den Positionen im Stacktrace in Modules/mmapmodule.c, insbesondere safe_byte_copy bei Zeile 406 und mmap_ass_subscript_lock_held ungefähr bei Zeile 1692. Führe das Beispiel unter AddressSanitizer aus und überprüfe, dass das Ändern der Größe während setitem nicht mehr abstürzt; gh-157438 ist bereits mit diesem Issue verknüpft.

Vom Indexierungsmodell aus dem Issue-Text verfasst.

Bewertung

Tech-Stack
c, python
Bereich
operating-systems
Issue-Typ
Bug
Schwierigkeit
4/5
Geschätzter Aufwand
3-5 Tage
Aktivitätsstatus
Veraltet
Klarheit
Klar beschrieben
Anfängerfreundlichkeit
25/100

Neue Issues direkt in Ihr Postfach

Eine kurze Übersicht über anfängerfreundliche GitHub-Issues.