Mercurial > cpython-lru_cache-weakref
diff Python/pystate.c @ 84418:ff30bf84b378 3.3
Issue #18328: Reorder ops in PyThreadState_Delete*() functions. Now the
tstate is first removed from TLS and then deallocated.
CID 1019639 (#1 of 1): Use after free (USE_AFTER_FREE)
use_after_free: Using freed pointer tstate.
| author | Christian Heimes <christian@cheimes.de> |
|---|---|
| date | Mon, 01 Jul 2013 23:42:28 +0200 |
| parents | 800507fb0a7e |
| children | ebe064e542ef |
line wrap: on
line diff
--- a/Python/pystate.c Mon Jul 01 23:00:13 2013 +0200 +++ b/Python/pystate.c Mon Jul 01 23:42:28 2013 +0200 @@ -388,11 +388,11 @@ { if (tstate == _Py_atomic_load_relaxed(&_PyThreadState_Current)) Py_FatalError("PyThreadState_Delete: tstate is still current"); - tstate_delete_common(tstate); #ifdef WITH_THREAD if (autoInterpreterState && PyThread_get_key_value(autoTLSkey) == tstate) PyThread_delete_key_value(autoTLSkey); #endif /* WITH_THREAD */ + tstate_delete_common(tstate); } @@ -406,9 +406,9 @@ Py_FatalError( "PyThreadState_DeleteCurrent: no current tstate"); _Py_atomic_store_relaxed(&_PyThreadState_Current, NULL); - tstate_delete_common(tstate); if (autoInterpreterState && PyThread_get_key_value(autoTLSkey) == tstate) PyThread_delete_key_value(autoTLSkey); + tstate_delete_common(tstate); PyEval_ReleaseLock(); } #endif /* WITH_THREAD */
