diff --git a/Misc/NEWS.d/next/Build/2026-08-14-20-16-55.gh-issue-153400.9Oxi-N.rst b/Misc/NEWS.d/next/Build/2026-08-14-20-16-55.gh-issue-153400.9Oxi-N.rst new file mode 100644 index 000000000000000..38eb51fa311562f --- /dev/null +++ b/Misc/NEWS.d/next/Build/2026-08-14-20-16-55.gh-issue-153400.9Oxi-N.rst @@ -0,0 +1 @@ +Fall back to the kernel-provided __NR_getrandom in configure checks, os.getrandom(), and interpreter entropy handling when libc SYS_getrandom is not available. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index d94291e2ae524bc..7838dd5497e3e5a 100644 --- a/Modules/posixmodule.c +++ b/Modules/posixmodule.c @@ -160,6 +160,9 @@ #ifdef HAVE_SYS_SYSCALL_H # include // syscall(), __NR_xxx syscall numbers #endif +#if !defined(SYS_getrandom) && defined(__NR_getrandom) +# define SYS_getrandom __NR_getrandom +#endif #ifdef HAVE_POSIX_SPAWN # include // posix_spawn() diff --git a/Python/bootstrap_hash.c b/Python/bootstrap_hash.c index 5bc45d503360376..a22688827612657 100644 --- a/Python/bootstrap_hash.c +++ b/Python/bootstrap_hash.c @@ -23,7 +23,10 @@ # include // getrandom() # endif # if !defined(HAVE_GETRANDOM) && defined(HAVE_GETRANDOM_SYSCALL) -# include // SYS_getrandom +# include // __NR_getrandom, SYS_getrandom +# if !defined(SYS_getrandom) && defined(__NR_getrandom) +# define SYS_getrandom __NR_getrandom +# endif # endif #endif diff --git a/configure b/configure index ea560d600722592..af3d65cac1b35f8 100755 --- a/configure +++ b/configure @@ -34261,7 +34261,11 @@ cat confdefs.h - <<_ACEOF >conftest.$ac_ext #include #include #include - #include + #include // GRND_NONBLOCK + + #if !defined(SYS_getrandom) && defined(__NR_getrandom) + # define SYS_getrandom __NR_getrandom + #endif int main(void) { char buffer[1]; diff --git a/configure.ac b/configure.ac index 7dfc6ca29297a8b..6c6dc9c75fe1ad6 100644 --- a/configure.ac +++ b/configure.ac @@ -7872,7 +7872,11 @@ AC_LINK_IFELSE( #include #include #include - #include + #include // GRND_NONBLOCK + + #if !defined(SYS_getrandom) && defined(__NR_getrandom) + # define SYS_getrandom __NR_getrandom + #endif int main(void) { char buffer[1];