aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMike Pall <mike>2020-07-13 11:54:08 +0200
committerMike Pall <mike>2020-07-13 11:54:08 +0200
commit570e758ca7dd14f93efdd43d68cf8979c1d7f984 (patch)
treeac4f36ff252ee6a290a982a13a4cfb161bbd1a0b /src
parent60ac12ed6fd612c84359d50ef3ceb3cfc85f7045 (diff)
downloadluajit-570e758ca7dd14f93efdd43d68cf8979c1d7f984.tar.gz
luajit-570e758ca7dd14f93efdd43d68cf8979c1d7f984.tar.bz2
luajit-570e758ca7dd14f93efdd43d68cf8979c1d7f984.zip
Handle old OSX/iOS without getentropy().
Diffstat (limited to 'src')
-rw-r--r--src/lj_prng.c18
1 files changed, 16 insertions, 2 deletions
diff --git a/src/lj_prng.c b/src/lj_prng.c
index c24fe630..a8b8b6de 100644
--- a/src/lj_prng.c
+++ b/src/lj_prng.c
@@ -107,7 +107,19 @@ static PRGR libfunc_rgr;
107#if LJ_TARGET_LINUX 107#if LJ_TARGET_LINUX
108/* Avoid a dependency on glibc 2.25+ and use the getrandom syscall instead. */ 108/* Avoid a dependency on glibc 2.25+ and use the getrandom syscall instead. */
109#include <sys/syscall.h> 109#include <sys/syscall.h>
110#elif LJ_TARGET_OSX || LJ_TARGET_BSD || LJ_TARGET_SOLARIS || LJ_TARGET_CYGWIN 110#else
111
112#if LJ_TARGET_OSX
113#include <Availability.h>
114#if __MAC_OS_X_VERSION_MIN_REQUIRED >= 101200 || \
115 __IPHONE_OS_VERSION_MIN_REQUIRED >= 100000
116#define LJ_TARGET_HAS_GETENTROPY 1
117#endif
118#elif LJ_TARGET_BSD || LJ_TARGET_SOLARIS || LJ_TARGET_CYGWIN
119#define LJ_TARGET_HAS_GETENTROPY 1
120#endif
121
122#if LJ_TARGET_HAS_GETENTROPY
111extern int getentropy(void *buf, size_t len); 123extern int getentropy(void *buf, size_t len);
112#ifdef __ELF__ 124#ifdef __ELF__
113 __attribute__((weak)) 125 __attribute__((weak))
@@ -115,6 +127,8 @@ extern int getentropy(void *buf, size_t len);
115; 127;
116#endif 128#endif
117 129
130#endif
131
118/* For the /dev/urandom fallback. */ 132/* For the /dev/urandom fallback. */
119#include <fcntl.h> 133#include <fcntl.h>
120#include <unistd.h> 134#include <unistd.h>
@@ -181,7 +195,7 @@ int LJ_FASTCALL lj_prng_seed_secure(PRNGState *rs)
181 if (syscall(SYS_getrandom, rs->u, sizeof(rs->u), 0) == (long)sizeof(rs->u)) 195 if (syscall(SYS_getrandom, rs->u, sizeof(rs->u), 0) == (long)sizeof(rs->u))
182 goto ok; 196 goto ok;
183 197
184#elif LJ_TARGET_OSX || LJ_TARGET_BSD || LJ_TARGET_SOLARIS || LJ_TARGET_CYGWIN 198#elif LJ_TARGET_HAS_GETENTROPY
185 199
186#ifdef __ELF__ 200#ifdef __ELF__
187 if (getentropy && getentropy(rs->u, sizeof(rs->u)) == 0) 201 if (getentropy && getentropy(rs->u, sizeof(rs->u)) == 0)