[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]
diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c
index 909b06e..f58572b 100644
--- a/Modules/posixmodule.c
+++ b/Modules/posixmodule.c
@@ -393,6 +393,10 @@
#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 @@
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 @@
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);