@@ -67,7 +67,11 @@ win32_urandom(unsigned char *buffer, Py_ssize_t size, int raise)
6767 return 0 ;
6868}
6969
70- #elif HAVE_GETENTROPY
70+ /* Issue #25003: Don' use getentropy() on Solaris (available since
71+ * Solaris 11.3), it is blocking whereas os.urandom() should not block. */
72+ #elif defined(HAVE_GETENTROPY ) && !defined(sun )
73+ #define PY_GETENTROPY 1
74+
7175/* Fill buffer with size pseudo-random bytes generated by getentropy().
7276 Return 0 on success, or raise an exception and return -1 on error.
7377
@@ -275,7 +279,7 @@ _PyOS_URandom(void *buffer, Py_ssize_t size)
275279
276280#ifdef MS_WINDOWS
277281 return win32_urandom ((unsigned char * )buffer , size , 1 );
278- #elif HAVE_GETENTROPY
282+ #elif defined( PY_GETENTROPY )
279283 return py_getentropy (buffer , size , 0 );
280284#else
281285 return dev_urandom_python ((char * )buffer , size );
@@ -322,7 +326,7 @@ _PyRandom_Init(void)
322326 else {
323327#ifdef MS_WINDOWS
324328 (void )win32_urandom (secret , secret_size , 0 );
325- #elif HAVE_GETENTROPY
329+ #elif defined( PY_GETENTROPY )
326330 (void )py_getentropy (secret , secret_size , 1 );
327331#else
328332 dev_urandom_noraise (secret , secret_size );
@@ -338,7 +342,7 @@ _PyRandom_Fini(void)
338342 CryptReleaseContext (hCryptProv , 0 );
339343 hCryptProv = 0 ;
340344 }
341- #elif HAVE_GETENTROPY
345+ #elif defined( PY_GETENTROPY )
342346 /* nothing to clean */
343347#else
344348 dev_urandom_close ();
0 commit comments