From 4a0bdb610f265af971f7ca17c1a29a6ab1d2ea50 Mon Sep 17 00:00:00 2001 From: Peter van Vugt Date: Tue, 21 Apr 2026 12:04:58 -0700 Subject: [PATCH 1/5] gh-148850: Fix msan false positive in os.getrandom --- Modules/posixmodule.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index e5ce487723b25b..c07d0f89d4e6f0 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -17195,6 +17195,10 @@ os_getrandom_impl(PyObject *module, Py_ssize_t size, int flags) goto error; } +#ifdef _Py_MEMORY_SANITIZER + __msan_unpoison(data, size); +#endif + return PyBytesWriter_FinishWithSize(writer, n); error: From d7337e067dde8b6223556aabe15e9974f15e0d61 Mon Sep 17 00:00:00 2001 From: "blurb-it[bot]" <43283697+blurb-it[bot]@users.noreply.github.com> Date: Tue, 21 Apr 2026 19:29:30 +0000 Subject: [PATCH 2/5] =?UTF-8?q?=F0=9F=93=9C=F0=9F=A4=96=20Added=20by=20blu?= =?UTF-8?q?rb=5Fit.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../2026-04-21-19-29-29.gh-issue-148850.MSH0J_.rst | 1 + 1 file changed, 1 insertion(+) create mode 100644 Misc/NEWS.d/next/Core_and_Builtins/2026-04-21-19-29-29.gh-issue-148850.MSH0J_.rst diff --git a/Misc/NEWS.d/next/Core_and_Builtins/2026-04-21-19-29-29.gh-issue-148850.MSH0J_.rst b/Misc/NEWS.d/next/Core_and_Builtins/2026-04-21-19-29-29.gh-issue-148850.MSH0J_.rst new file mode 100644 index 00000000000000..324d1610310158 --- /dev/null +++ b/Misc/NEWS.d/next/Core_and_Builtins/2026-04-21-19-29-29.gh-issue-148850.MSH0J_.rst @@ -0,0 +1 @@ +Fix the memory sanitizer false positive in :func:`os.getrandom`. From f455687600596a0c534efa1cc670310c69a19281 Mon Sep 17 00:00:00 2001 From: Peter van Vugt Date: Wed, 22 Apr 2026 18:45:57 -0700 Subject: [PATCH 3/5] PR feedback --- Include/pyport.h | 4 ++++ Modules/posixmodule.c | 4 +--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/Include/pyport.h b/Include/pyport.h index c975921beafb9e..6b4496232a31f4 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -553,6 +553,7 @@ extern "C" { # if !defined(_Py_MEMORY_SANITIZER) # define _Py_MEMORY_SANITIZER # define _Py_NO_SANITIZE_MEMORY __attribute__((no_sanitize_memory)) +# define _Py_MSAN_UNPOISON(p, sz) (__msan_unpoison(p, sz)) # endif # endif # if __has_feature(address_sanitizer) @@ -591,6 +592,9 @@ extern "C" { #ifndef _Py_NO_SANITIZE_MEMORY # define _Py_NO_SANITIZE_MEMORY #endif +#ifndef _Py_MSAN_UNPOISON +# define _Py_MSAN_UNPOISON +#endif /* AIX has __bool__ redefined in it's system header file. */ #if defined(_AIX) && defined(__bool__) diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index c07d0f89d4e6f0..3bdbf2ef81679e 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -17195,9 +17195,7 @@ os_getrandom_impl(PyObject *module, Py_ssize_t size, int flags) goto error; } -#ifdef _Py_MEMORY_SANITIZER - __msan_unpoison(data, size); -#endif + _Py_MSAN_UNPOISON(data, size); return PyBytesWriter_FinishWithSize(writer, n); From a0ff7faf6bb28894239b62034f691edcf5f9194e Mon Sep 17 00:00:00 2001 From: petervanvugt <65050545+petervanvugt@users.noreply.github.com> Date: Thu, 23 Apr 2026 10:41:08 -0700 Subject: [PATCH 4/5] Update Include/pyport.h Co-authored-by: Petr Viktorin --- Include/pyport.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Include/pyport.h b/Include/pyport.h index 6b4496232a31f4..dd9b2d81bb57da 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -593,7 +593,7 @@ extern "C" { # define _Py_NO_SANITIZE_MEMORY #endif #ifndef _Py_MSAN_UNPOISON -# define _Py_MSAN_UNPOISON +# define _Py_MSAN_UNPOISON(PTR, SIZE) #endif /* AIX has __bool__ redefined in it's system header file. */ From 587949b13f1cecc3016a3b62be17d6a6fbf37633 Mon Sep 17 00:00:00 2001 From: petervanvugt <65050545+petervanvugt@users.noreply.github.com> Date: Thu, 23 Apr 2026 10:41:16 -0700 Subject: [PATCH 5/5] Update Include/pyport.h Co-authored-by: Petr Viktorin --- Include/pyport.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Include/pyport.h b/Include/pyport.h index dd9b2d81bb57da..73a3e6cdaf0920 100644 --- a/Include/pyport.h +++ b/Include/pyport.h @@ -553,7 +553,7 @@ extern "C" { # if !defined(_Py_MEMORY_SANITIZER) # define _Py_MEMORY_SANITIZER # define _Py_NO_SANITIZE_MEMORY __attribute__((no_sanitize_memory)) -# define _Py_MSAN_UNPOISON(p, sz) (__msan_unpoison(p, sz)) +# define _Py_MSAN_UNPOISON(PTR, SIZE) (__msan_unpoison(PTR, SIZE)) # endif # endif # if __has_feature(address_sanitizer)