mirror of
https://github.com/php/php-src.git
synced 2026-03-24 00:02:20 +01:00
Checks getrandom availability on solaris.
To fix part of GH-15381. gcc nor clang provides a constant to distinguish illumos and solaris not the system provides a kernel version stamp like the BSD. thus, we simply check the symbol and remaing purposely conservative in the existing logic, using it only for solaris to avoid unexpected breakages for other systems. would need a different fix for higher branches. Close GH-15390
This commit is contained in:
@@ -14,6 +14,11 @@ AC_CHECK_HEADERS([CommonCrypto/CommonRandom.h], [], [],
|
||||
#include <CommonCrypto/CommonCryptoError.h>
|
||||
])
|
||||
|
||||
dnl
|
||||
dnl Mostly for non Linux systems
|
||||
dnl
|
||||
AC_CHECK_FUNCS([getrandom])
|
||||
|
||||
dnl
|
||||
dnl Setup extension
|
||||
dnl
|
||||
|
||||
@@ -46,7 +46,7 @@
|
||||
#if HAVE_SYS_PARAM_H
|
||||
# include <sys/param.h>
|
||||
# if (__FreeBSD__ && __FreeBSD_version > 1200000) || (__DragonFly__ && __DragonFly_version >= 500700) || \
|
||||
defined(__sun) || (defined(__NetBSD__) && __NetBSD_Version__ >= 1000000000)
|
||||
(defined(__sun) && defined(HAVE_GETRANDOM)) || (defined(__NetBSD__) && __NetBSD_Version__ >= 1000000000)
|
||||
# include <sys/random.h>
|
||||
# endif
|
||||
#endif
|
||||
@@ -98,7 +98,7 @@ PHPAPI zend_result php_random_bytes(void *bytes, size_t size, bool should_throw)
|
||||
#else
|
||||
size_t read_bytes = 0;
|
||||
# if (defined(__linux__) && defined(SYS_getrandom)) || (defined(__FreeBSD__) && __FreeBSD_version >= 1200000) || (defined(__DragonFly__) && __DragonFly_version >= 500700) || \
|
||||
defined(__sun) || (defined(__NetBSD__) && __NetBSD_Version__ >= 1000000000)
|
||||
(defined(__sun) && defined(HAVE_GETRANDOM)) || (defined(__NetBSD__) && __NetBSD_Version__ >= 1000000000)
|
||||
/* Linux getrandom(2) syscall or FreeBSD/DragonFlyBSD/NetBSD getrandom(2) function
|
||||
* Being a syscall, implemented in the kernel, getrandom offers higher quality output
|
||||
* compared to the arc4random api albeit a fallback to /dev/urandom is considered.
|
||||
|
||||
Reference in New Issue
Block a user