Skip to content

Commit 1181a68

Browse files
committed
[Bug #21448] Use getentropy(2) only on macOS
If this is not a system call, then it is using getrandom (which would have been tried already), and cannot be used as a replacement for the random devices.
1 parent dbc5969 commit 1181a68

File tree

1 file changed

+17
-10
lines changed

1 file changed

+17
-10
lines changed

random.c

Lines changed: 17 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -438,7 +438,23 @@ random_init(int argc, VALUE *argv, VALUE obj)
438438
# define USE_DEV_URANDOM 0
439439
#endif
440440

441-
#ifdef HAVE_GETENTROPY
441+
#if ! defined HAVE_GETRANDOM && defined __linux__ && defined __NR_getrandom
442+
# ifndef GRND_NONBLOCK
443+
# define GRND_NONBLOCK 0x0001 /* not defined in musl libc */
444+
# endif
445+
# define getrandom(ptr, size, flags) \
446+
(ssize_t)syscall(__NR_getrandom, (ptr), (size), (flags))
447+
# define HAVE_GETRANDOM 1
448+
#endif
449+
450+
#if defined(HAVE_GETENTROPY) && !defined(HAVE_GETRANDOM)
451+
/*
452+
* In the case both `getentropy` and `getrandom` are defined, assume
453+
* that the former is implemented using the latter, and use the latter
454+
* in the `syscall` version.
455+
* Otherwise, in the case only `getentropy`, assume it is defined as
456+
* the replacement for security purpose of `/dev/urandom`.
457+
*/
442458
# define MAX_SEED_LEN_PER_READ 256
443459
static int
444460
fill_random_bytes_urandom(void *seed, size_t size)
@@ -494,15 +510,6 @@ fill_random_bytes_urandom(void *seed, size_t size)
494510
# define fill_random_bytes_urandom(seed, size) -1
495511
#endif
496512

497-
#if ! defined HAVE_GETRANDOM && defined __linux__ && defined __NR_getrandom
498-
# ifndef GRND_NONBLOCK
499-
# define GRND_NONBLOCK 0x0001 /* not defined in musl libc */
500-
# endif
501-
# define getrandom(ptr, size, flags) \
502-
(ssize_t)syscall(__NR_getrandom, (ptr), (size), (flags))
503-
# define HAVE_GETRANDOM 1
504-
#endif
505-
506513
#if 0
507514
#elif defined MAC_OS_X_VERSION_10_7 && MAC_OS_X_VERSION_MIN_REQUIRED >= MAC_OS_X_VERSION_10_7
508515

0 commit comments

Comments
 (0)