[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);