[3.7] bpo-35214: Annotate posix calls for clang MSan. (GH-11389) (GH-11391)

https://github.com/python/cpython/commit/efcf08d8ca9084d8248715f0634c21b705f... commit: efcf08d8ca9084d8248715f0634c21b705f02ca2 branch: 3.7 author: Gregory P. Smith <greg@krypto.org> committer: GitHub <noreply@github.com> date: 2018-12-30T22:14:33-08:00 summary: [3.7] bpo-35214: Annotate posix calls for clang MSan. (GH-11389) (GH-11391) It doesn't know the details of a few less common libc functions.. (cherry picked from commit 1d300ce1d8238136595c8fea76266a4755cd73a2) Co-authored-by: Gregory P. Smith <greg@krypto.org> [Google] files: M Misc/NEWS.d/next/Core and Builtins/2018-12-30-15-36-23.bpo-35214.GWDQcv.rst M Modules/posixmodule.c diff --git a/Misc/NEWS.d/next/Core and Builtins/2018-12-30-15-36-23.bpo-35214.GWDQcv.rst b/Misc/NEWS.d/next/Core and Builtins/2018-12-30-15-36-23.bpo-35214.GWDQcv.rst index 62dee0e37008..fa61f78a9328 100644 --- a/Misc/NEWS.d/next/Core and Builtins/2018-12-30-15-36-23.bpo-35214.GWDQcv.rst +++ b/Misc/NEWS.d/next/Core and Builtins/2018-12-30-15-36-23.bpo-35214.GWDQcv.rst @@ -1,2 +1,2 @@ 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. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index 909b06e5a9dd..f58572b2ceb4 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -393,6 +393,10 @@ static int win32_can_symlink = 0; #define HAVE_STRUCT_STAT_ST_FSTYPE 1 #endif +#ifdef _Py_MEMORY_SANITIZER +# include <sanitizer/msan_interface.h> +#endif + #ifdef HAVE_FORK static void run_at_forkers(PyObject *lst, int reverse) @@ -5689,6 +5693,9 @@ os_sched_rr_get_interval_impl(PyObject *module, pid_t pid) posix_error(); return -1.0; } +#ifdef _Py_MEMORY_SANITIZER + __msan_unpoison(&interval, sizeof(interval)); +#endif return (double)interval.tv_sec + 1e-9*interval.tv_nsec; } #endif /* HAVE_SCHED_RR_GET_INTERVAL */ @@ -6155,6 +6162,12 @@ posix_getgrouplist(PyObject *self, PyObject *args) 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); if (list == NULL) { PyMem_Del(groups);
participants (1)
-
Gregory P. Smith