]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
bpo-40071: Fix potential crash in _functoolsmodule.c (GH-19273)
authorPaulo Henrique Silva <ph.silva@carta.com>
Wed, 1 Apr 2020 15:06:21 +0000 (12:06 -0300)
committerGitHub <noreply@github.com>
Wed, 1 Apr 2020 15:06:21 +0000 (17:06 +0200)
Changes on 7dd549eb0893 made _functools compatible with
PEP-489 and we could have multiple modules instances loaded.

But, right now there is no way to make `kwd_mark` global into
a per module instance variable. kwd_mark is used on lru_cache_new
which does not have a reference to a PyModule*, necessary to use
PyModule_GetState.

PEP-573 will solve this problem and will allow us to move the global
state to per-module data and properly clear the state when unloading
a module instance.

This change temporarily disable cleaning of kwd_mark to avoid NULL
pointer dereference if we clear kwd_mark and other module instances
still alive use it.

Modules/_functoolsmodule.c

index dbe022e91d18f129e6f8dfc83f9c04eb1f796208..f3d8658044b997e4be1a5c0a9dd5d2199d3f6de3 100644 (file)
@@ -1413,7 +1413,10 @@ static PyMethodDef _functools_methods[] = {
 static void
 _functools_free(void *m)
 {
-    Py_CLEAR(kwd_mark);
+    // FIXME: Do not clear kwd_mark to avoid NULL pointer dereferencing if we have
+    //        other modules instances that could use it. Will fix when PEP-573 land
+    //        and we could move kwd_mark to a per-module state.
+    // Py_CLEAR(kwd_mark);
 }
 
 static int