]> git.ipfire.org Git - thirdparty/Python/cpython.git/commitdiff
gh-103295: fix stack overwrite on 32-bit in perf map test harness (#104811)
authorCarl Meyer <carl@oddbird.net>
Tue, 23 May 2023 22:04:31 +0000 (16:04 -0600)
committerGitHub <noreply@github.com>
Tue, 23 May 2023 22:04:31 +0000 (16:04 -0600)
Modules/_testinternalcapi.c

index b91f7b620fdb4eeb69295d3feaaa1157679103a3..8267dbf67790172bba9a7f6cf1fd7e17e401d751 100644 (file)
@@ -762,19 +762,24 @@ clear_extension(PyObject *self, PyObject *args)
 static PyObject *
 write_perf_map_entry(PyObject *self, PyObject *args)
 {
+    PyObject *code_addr_v;
     const void *code_addr;
     unsigned int code_size;
     const char *entry_name;
 
-    if (!PyArg_ParseTuple(args, "KIs", &code_addr, &code_size, &entry_name))
+    if (!PyArg_ParseTuple(args, "OIs", &code_addr_v, &code_size, &entry_name))
         return NULL;
+    code_addr = PyLong_AsVoidPtr(code_addr_v);
+    if (code_addr == NULL) {
+        return NULL;
+    }
 
     int ret = PyUnstable_WritePerfMapEntry(code_addr, code_size, entry_name);
-    if (ret == -1) {
-        PyErr_SetString(PyExc_OSError, "Failed to write performance map entry");
+    if (ret < 0) {
+        PyErr_SetFromErrno(PyExc_OSError);
         return NULL;
     }
-    return Py_BuildValue("i", ret);
+    return PyLong_FromLong(ret);
 }
 
 static PyObject *