aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThijs Schreijer <thijs@thijsschreijer.nl>2025-03-12 14:47:36 +0100
committerThijs Schreijer <thijs@thijsschreijer.nl>2025-03-12 16:07:24 +0100
commitea7065b1f2d20c6126e18d50db586c66a8302139 (patch)
tree045f2502e475e685264fdf09ec51ff296a57609c /src
parent23a9b345172da87e701a1569547cea0767ea9d93 (diff)
downloadluasystem-ea7065b1f2d20c6126e18d50db586c66a8302139.tar.gz
luasystem-ea7065b1f2d20c6126e18d50db586c66a8302139.tar.bz2
luasystem-ea7065b1f2d20c6126e18d50db586c66a8302139.zip
fix(random): on old glibc < 2.25, falback to /dev/urandom
Diffstat (limited to 'src')
-rw-r--r--src/random.c13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/random.c b/src/random.c
index 7bffe30..5a07e0d 100644
--- a/src/random.c
+++ b/src/random.c
@@ -17,7 +17,12 @@
17 #include <unistd.h> 17 #include <unistd.h>
18 #include <string.h> 18 #include <string.h>
19 #if defined(__linux__) 19 #if defined(__linux__)
20 #include <sys/random.h> // getrandom() 20 // getrandom() requires random.h and is available from glibc 2.25
21 #if !defined(__GLIBC__) || (__GLIBC__ < 2 || __GLIBC_MINOR__ < 25)
22 #define USE_DEV_URANDOM 1
23 #else
24 #include <sys/random.h> // getrandom()
25 #endif
21 #elif defined(__APPLE__) || defined(__unix__) 26 #elif defined(__APPLE__) || defined(__unix__)
22 #include <stdlib.h> // arc4random_buf() 27 #include <stdlib.h> // arc4random_buf()
23 #endif 28 #endif
@@ -67,8 +72,8 @@ static int lua_get_random_bytes(lua_State* L) {
67 return 2; 72 return 2;
68 } 73 }
69 74
70#elif defined(__linux__) 75#elif defined(__linux__) && !defined(USE_DEV_URANDOM)
71 // Use getrandom() on Linux (Kernel 3.17+, 2014) 76 // Use getrandom() on Linux
72 while (total_read < num_bytes) { 77 while (total_read < num_bytes) {
73 ssize_t n = getrandom(buffer + total_read, num_bytes - total_read, 0); 78 ssize_t n = getrandom(buffer + total_read, num_bytes - total_read, 0);
74 if (n < 0) { 79 if (n < 0) {
@@ -80,7 +85,7 @@ static int lua_get_random_bytes(lua_State* L) {
80 total_read += n; 85 total_read += n;
81 } 86 }
82 87
83#elif defined(__APPLE__) || defined(__unix__) 88#elif defined(__APPLE__) || (defined(__unix__) && !defined(USE_DEV_URANDOM))
84 // Use arc4random_buf() on BSD/macOS 89 // Use arc4random_buf() on BSD/macOS
85 arc4random_buf(buffer, num_bytes); 90 arc4random_buf(buffer, num_bytes);
86 91