bpo-35214: Annotate posix calls for clang MSan. (#11389)
It doesn't know the details of a few less common libc functions.
This commit is contained in:
parent
e5796c42c6
commit
1d300ce1d8
|
@ -1,2 +1,2 @@
|
||||||
clang Memory Sanitizer build instrumentation was added to work around false
|
clang Memory Sanitizer build instrumentation was added to work around false
|
||||||
positives from socket, time, test_io, and test_faulthandler.
|
positives from posix, socket, time, test_io, and test_faulthandler.
|
||||||
|
|
|
@ -367,6 +367,10 @@ static int win32_can_symlink = 0;
|
||||||
#define HAVE_STRUCT_STAT_ST_FSTYPE 1
|
#define HAVE_STRUCT_STAT_ST_FSTYPE 1
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef _Py_MEMORY_SANITIZER
|
||||||
|
# include <sanitizer/msan_interface.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef HAVE_FORK
|
#ifdef HAVE_FORK
|
||||||
static void
|
static void
|
||||||
run_at_forkers(PyObject *lst, int reverse)
|
run_at_forkers(PyObject *lst, int reverse)
|
||||||
|
@ -5493,6 +5497,9 @@ os_posix_spawn_impl(PyObject *module, path_t *path, PyObject *argv,
|
||||||
PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path->object);
|
PyErr_SetFromErrnoWithFilenameObject(PyExc_OSError, path->object);
|
||||||
goto exit;
|
goto exit;
|
||||||
}
|
}
|
||||||
|
#ifdef _Py_MEMORY_SANITIZER
|
||||||
|
__msan_unpoison(&pid, sizeof(pid));
|
||||||
|
#endif
|
||||||
result = PyLong_FromPid(pid);
|
result = PyLong_FromPid(pid);
|
||||||
|
|
||||||
exit:
|
exit:
|
||||||
|
@ -6098,6 +6105,9 @@ os_sched_rr_get_interval_impl(PyObject *module, pid_t pid)
|
||||||
posix_error();
|
posix_error();
|
||||||
return -1.0;
|
return -1.0;
|
||||||
}
|
}
|
||||||
|
#ifdef _Py_MEMORY_SANITIZER
|
||||||
|
__msan_unpoison(&interval, sizeof(interval));
|
||||||
|
#endif
|
||||||
return (double)interval.tv_sec + 1e-9*interval.tv_nsec;
|
return (double)interval.tv_sec + 1e-9*interval.tv_nsec;
|
||||||
}
|
}
|
||||||
#endif /* HAVE_SCHED_RR_GET_INTERVAL */
|
#endif /* HAVE_SCHED_RR_GET_INTERVAL */
|
||||||
|
@ -6568,6 +6578,12 @@ posix_getgrouplist(PyObject *self, PyObject *args)
|
||||||
return posix_error();
|
return posix_error();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef _Py_MEMORY_SANITIZER
|
||||||
|
/* Clang memory sanitizer libc intercepts don't know getgrouplist. */
|
||||||
|
__msan_unpoison(&ngroups, sizeof(ngroups));
|
||||||
|
__msan_unpoison(groups, ngroups*sizeof(*groups));
|
||||||
|
#endif
|
||||||
|
|
||||||
list = PyList_New(ngroups);
|
list = PyList_New(ngroups);
|
||||||
if (list == NULL) {
|
if (list == NULL) {
|
||||||
PyMem_Del(groups);
|
PyMem_Del(groups);
|
||||||
|
|
Loading…
Reference in New Issue