random.c (fill_random_bytes_syscall): use "__NR_" prefix on Linux
glibc still does not define the SYS_getrandom alias for __NR_getrandom in the Linux kernel. However, installing up-to-date Linux kernel headers (linux-libc-dev >= 3.17 package on Debian) will get the __NR_getrandom syscall number defined properly without relying on glibc. This allows users with a modern kernel+headers to use the getrandom syscall without waiting on glibc support. git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@57307 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
parent
3e34d8a44f
commit
208018fb9d
4
random.c
4
random.c
@ -505,7 +505,7 @@ fill_random_bytes_syscall(void *seed, size_t size, int unused)
|
|||||||
CryptGenRandom(prov, size, seed);
|
CryptGenRandom(prov, size, seed);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#elif defined __linux__ && defined SYS_getrandom
|
#elif defined __linux__ && defined __NR_getrandom
|
||||||
#include <linux/random.h>
|
#include <linux/random.h>
|
||||||
|
|
||||||
# ifndef GRND_NONBLOCK
|
# ifndef GRND_NONBLOCK
|
||||||
@ -522,7 +522,7 @@ fill_random_bytes_syscall(void *seed, size_t size, int need_secure)
|
|||||||
if (!need_secure)
|
if (!need_secure)
|
||||||
flags = GRND_NONBLOCK;
|
flags = GRND_NONBLOCK;
|
||||||
errno = 0;
|
errno = 0;
|
||||||
ret = syscall(SYS_getrandom, seed, size, flags);
|
ret = syscall(__NR_getrandom, seed, size, flags);
|
||||||
if (errno == ENOSYS) {
|
if (errno == ENOSYS) {
|
||||||
ATOMIC_SET(try_syscall, 0);
|
ATOMIC_SET(try_syscall, 0);
|
||||||
return -1;
|
return -1;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user