gh-134144: Fix use-after-free in zapthreads() (#134145)

This commit is contained in:
b-pass 2025-05-18 11:02:29 -04:00 committed by GitHub
parent 0a160bf14c
commit f2de1e6861
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
4 changed files with 41 additions and 6 deletions

View file

@ -1908,9 +1908,14 @@ tstate_delete_common(PyThreadState *tstate, int release_gil)
static void
zapthreads(PyInterpreterState *interp)
{
PyThreadState *tstate;
/* No need to lock the mutex here because this should only happen
when the threads are all really dead (XXX famous last words). */
_Py_FOR_EACH_TSTATE_UNLOCKED(interp, tstate) {
when the threads are all really dead (XXX famous last words).
Cannot use _Py_FOR_EACH_TSTATE_UNLOCKED because we are freeing
the thread states here.
*/
while ((tstate = interp->threads.head) != NULL) {
tstate_verify_not_active(tstate);
tstate_delete_common(tstate, 0);
free_threadstate((_PyThreadStateImpl *)tstate);