diff options
Diffstat (limited to 'Modules')
-rw-r--r-- | Modules/_ctypes/callproc.c | 11 | ||||
-rw-r--r-- | Modules/_posixsubprocess.c | 7 | ||||
-rw-r--r-- | Modules/faulthandler.c | 2 |
3 files changed, 19 insertions, 1 deletions
diff --git a/Modules/_ctypes/callproc.c b/Modules/_ctypes/callproc.c index ba154fe..33b7055 100644 --- a/Modules/_ctypes/callproc.c +++ b/Modules/_ctypes/callproc.c @@ -75,6 +75,10 @@ #include <alloca.h> #endif +#ifdef MEMORY_SANITIZER +#include <sanitizer/msan_interface.h> +#endif + #if defined(_DEBUG) || defined(__MINGW32__) /* Don't use structured exception handling on Windows if this is defined. MingW, AFAIK, doesn't support it. @@ -1125,6 +1129,13 @@ PyObject *_ctypes_callproc(PPROC pProc, rtype = _ctypes_get_ffi_type(restype); resbuf = alloca(max(rtype->size, sizeof(ffi_arg))); +#ifdef MEMORY_SANITIZER + /* ffi_call actually initializes resbuf, but from asm, which + * MemorySanitizer can't detect. Avoid false positives from MSan. */ + if (resbuf != NULL) { + __msan_unpoison(resbuf, max(rtype->size, sizeof(ffi_arg))); + } +#endif avalues = (void **)alloca(sizeof(void *) * argcount); atypes = (ffi_type **)alloca(sizeof(ffi_type *) * argcount); if (!resbuf || !avalues || !atypes) { diff --git a/Modules/_posixsubprocess.c b/Modules/_posixsubprocess.c index 9661e38..7ee3f71 100644 --- a/Modules/_posixsubprocess.c +++ b/Modules/_posixsubprocess.c @@ -21,6 +21,10 @@ #include <dirent.h> #endif +#ifdef MEMORY_SANITIZER +# include <sanitizer/msan_interface.h> +#endif + #if defined(__ANDROID__) && __ANDROID_API__ < 21 && !defined(SYS_getdents64) # include <sys/linux-syscalls.h> # define SYS_getdents64 __NR_getdents64 @@ -287,6 +291,9 @@ _close_open_fds_safe(int start_fd, PyObject* py_fds_to_keep) sizeof(buffer))) > 0) { struct linux_dirent64 *entry; int offset; +#ifdef MEMORY_SANITIZER + __msan_unpoison(buffer, bytes); +#endif for (offset = 0; offset < bytes; offset += entry->d_reclen) { int fd; entry = (struct linux_dirent64 *)(buffer + offset); diff --git a/Modules/faulthandler.c b/Modules/faulthandler.c index 2f9c2f6..17bf3fa 100644 --- a/Modules/faulthandler.c +++ b/Modules/faulthandler.c @@ -1370,7 +1370,7 @@ void _PyFaulthandler_Fini(void) #ifdef HAVE_SIGALTSTACK if (stack.ss_sp != NULL) { /* Fetch the current alt stack */ - stack_t current_stack; + stack_t current_stack = {}; if (sigaltstack(NULL, ¤t_stack) == 0) { if (current_stack.ss_sp == stack.ss_sp) { /* The current alt stack is the one that we installed. |