import mmap mm = mmap.mmap(-1, 100000) class mid: def __index__(self): mm.resize(8) return 0 mm[90000] = mid()
==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 main branch
Linux
I don't remember whether this was considered legitimate or not (that is, messing up with mmap like that). I feel that this is close to #148650 (maybe not the same cause, but similar issue, that is concurrent mutation).
cc @serhiy-storchaka @vstinner
@djarfluka Btw, is it a core dump when built without ASAN or is it a silent out-of-bound write?
@picnixz sorry for the messy bug report. will give more descriptive titles in the future. I'm seeing a silent oob write
pythongh-157335: Address review feedback on mmap setitem reentrancy fix
pythongh-157335 Removed redundant CHECK_VALID check.
gh-157335: Fix out-of-bounds write in mmap.mmap.__setitem__ (#157438)
The reproducer now fails with:
Traceback (most recent call last): File "script.py", line 7, in <module> mm[90000] = mid() ~~^^^^^^^ IndexError: mmap index out of range
[3.13] gh-157335: Fix out-of-bounds write in mmap.mmap.__setitem__ (#…
[3.14] gh-157335: Fix out-of-bounds write in mmap.mmap.__setitem__ (G…
[3.15] gh-157335: Fix out-of-bounds write in mmap.mmap.__setitem__ (G…
Activity
picnixz commented on Sep 11, 2026
I don't remember whether this was considered legitimate or not (that is, messing up with mmap like that).
I feel that this is close to #148650 (maybe not the same cause, but similar issue, that is concurrent mutation).
cc @serhiy-storchaka @vstinner
picnixz commented on Sep 11, 2026
@djarfluka Btw, is it a core dump when built without ASAN or is it a silent out-of-bound write?
djarfluka commented on Sep 11, 2026
@picnixz sorry for the messy bug report. will give more descriptive titles in the future. I'm seeing a silent oob write
pythongh-157335: Address review feedback on mmap setitem reentrancy fix
pythongh-157335 Removed redundant CHECK_VALID check.
gh-157335: Fix out-of-bounds write in mmap.mmap.__setitem__ (#157438)
vstinner commented on Sep 23, 2026
The reproducer now fails with:
Traceback (most recent call last): File "script.py", line 7, in <module> mm[90000] = mid() ~~^^^^^^^ IndexError: mmap index out of range[3.13] gh-157335: Fix out-of-bounds write in mmap.mmap.__setitem__ (#…
[3.14] gh-157335: Fix out-of-bounds write in mmap.mmap.__setitem__ (G…
[3.15] gh-157335: Fix out-of-bounds write in mmap.mmap.__setitem__ (G…