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 00000000000000..17241c897905b0 --- /dev/null +++ b/Misc/NEWS.d/next/Build/2026-08-14-20-16-55.gh-issue-153400.9Oxi-N.rst @@ -0,0 +1 @@ +Support os.getrandom() when building Python with old glibc versions and recent Linux kernel (glibc 2.25 or older and Linux kernel 3.17 or newer). Get the syscall number from kernel headers, rather than glibc headers. diff --git a/Modules/posixmodule.c b/Modules/posixmodule.c index d94291e2ae524b..7838dd5497e3e5 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 5bc45d50336037..a2268882761265 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 ea560d60072259..af3d65cac1b35f 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 7dfc6ca29297a8..6c6dc9c75fe1ad 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];