Project

General

Profile

Actions

Bug #11395

closed

ruby gets stuck when entropy_avail is 0

Added by mame (Yusuke Endoh) over 9 years ago. Updated over 9 years ago.

Status:
Closed
Target version:
-
ruby -v:
ruby 2.3.0dev (2015-07-24 master 51364) [x86_64-linux]
[ruby-core:70114]

Description

When /proc/sys/kernel/random/entropy_avail is 0, Ruby gets stuck during initialization.

$ ruby -v
(stuck)

This is caused by r51182. I think that the GRND_NONBLOCK flag should be set to getrandom syscall.

The following patch works for me. But I have no idea to remove the magic number "1 (= GRND_NONBLOCK)".

diff --git a/random.c b/random.c
index 6452456..9ef89f9 100644
--- a/random.c
+++ b/random.c
@@ -523,11 +523,14 @@ 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, 1);
 	if (errno == ENOSYS) {
 	    try_syscall = 0;
 	    return -1;
 	}
+	if (errno == EAGAIN) {
+	    return -1;
+	}
 	if ((size_t)ret == size) return 0;
     }
     return -1;

--
Yusuke Endoh

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0