Project

General

Profile

Bug #11395

Updated by nobu (Nobuyoshi Nakada) almost 9 years ago

When `/proc/sys/kernel/random/entropy_avail` /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` GRND_NONBLOCK flag should be set to `getrandom` getrandom syscall. 

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

 ~~~~diff ~~~~ 
 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 <mame@ruby-lang.org>

Back