Closed
Description
Crash report
What happened?
It's possible to crash grp
in a no-gil build by repeatedly calling functions in threads, it only happens with PYTHON_GIL=0
.
from threading import Thread import grp for x in range(5000): alive = [ Thread(target=grp.getgrgid, args=(1,)), Thread(target=grp.getgrall), Thread(target=grp.getgrnam, args=('root',)), ] for obj in alive: print('START', obj) obj.start()
Backtrace is:
(gdb) bt #0 __strlen_avx2 () at ../sysdeps/x86_64/multiarch/strlen-avx2.S:74 #1 0x00005555557ad3cb in PyUnicode_DecodeFSDefault ( s=s@entry=0x3838323432353a78 <error: Cannot access memory at address 0x3838323432353a78>) at Objects/unicodeobject.c:4058 #2 0x00007ffff7c3f952 in mkgrent ( module=module@entry=0x20000795b80, p=<optimized out>) at ./Modules/grpmodule.c:83 #3 0x00007ffff7c3fc41 in grp_getgrall_impl ( module=0x20000795b80) at ./Modules/grpmodule.c:291 #4 0x00007ffff7c3fcad in grp_getgrall ( module=<optimized out>, _unused_ignored=<optimized out>) at ./Modules/clinic/grpmodule.c.h:83 #5 0x00005555556fca83 in cfunction_vectorcall_NOARGS ( func=0x2000079f820, args=<optimized out>, nargsf=<optimized out>, kwnames=<optimized out>) at Objects/methodobject.c:495 #6 0x000055555567b4bc in _PyVectorcall_Call ( tstate=tstate@entry=0x555555d2ac70, func=0x5555556fc8b5 <cfunction_vectorcall_NOARGS>, callable=callable@entry=0x2000079f820, tuple=tuple@entry=0x555555c5d1d8 <_PyRuntime+128984>, kwargs=kwargs@entry=0x2001a0400d0) at Objects/call.c:273 #7 0x000055555567b894 in _PyObject_Call ( tstate=0x555555d2ac70, callable=callable@entry=0x2000079f820, args=args@entry=0x555555c5d1d8 <_PyRuntime+128984>, kwargs=kwargs@entry=0x2001a0400d0) at Objects/call.c:348 #8 0x000055555567b8f1 in PyObject_Call ( callable=callable@entry=0x2000079f820, args=args@entry=0x555555c5d1d8 <_PyRuntime+128984>, kwargs=kwargs@entry=0x2001a0400d0) at Objects/call.c:373
Found using fusil by @vstinner.
CPython versions tested on:
CPython main branch
Operating systems tested on:
Linux
Output from running 'python -VV' on the command line:
Python 3.14.0a1+ experimental free-threading build (heads/main:d467d9246c, Nov 1 2024, 09:05:56) [GCC 11.4.0]
Linked PRs
- gh-126316: Use critical sections in grp module #126488
- gh-126316: Use mutexes in the grp module #126504
- gh-126316: Use getgrent_r() in grp.getgrall() #126506
- gh-126316: Make grp.getgrall() thread-safe: add a mutex #127055
- [3.13] gh-126316: Make grp.getgrall() thread-safe: add a mutex (#127055) #127104
Metadata
Metadata
Assignees
Labels
Projects
Status
Done