From cbf8e02a58b43473cef661af9e14db11be9f3341 Mon Sep 17 00:00:00 2001 From: nobu Date: Sat, 25 Jul 2015 12:03:50 +0000 Subject: random.c: get rid of blocking * random.c (fill_random_bytes_syscall): get rid of blocking when no entropy is available. based on the patch by mame in [ruby-core:70114]. [Bug #11395] git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@51374 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- random.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'random.c') diff --git a/random.c b/random.c index 64524561f5..9f39dc2268 100644 --- a/random.c +++ b/random.c @@ -516,6 +516,12 @@ fill_random_bytes_syscall(void *seed, size_t size) return 0; } #elif defined __linux__ && defined SYS_getrandom +#include + +# ifndef GRND_NONBLOCK +# define GRND_NONBLOCK 0x0001 /* not defined in musl libc */ +# endif + static int fill_random_bytes_syscall(void *seed, size_t size) { @@ -523,7 +529,7 @@ fill_random_bytes_syscall(void *seed, size_t size) if (try_syscall) { long ret; errno = 0; - ret = syscall(SYS_getrandom, seed, size, 0); + ret = syscall(SYS_getrandom, seed, size, GRND_NONBLOCK); if (errno == ENOSYS) { try_syscall = 0; return -1; -- cgit v1.2.3