From ea7065b1f2d20c6126e18d50db586c66a8302139 Mon Sep 17 00:00:00 2001 From: Thijs Schreijer Date: Wed, 12 Mar 2025 14:47:36 +0100 Subject: fix(random): on old glibc < 2.25, falback to /dev/urandom --- src/random.c | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'src') 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 @@ #include #include #if defined(__linux__) - #include // getrandom() + // getrandom() requires random.h and is available from glibc 2.25 + #if !defined(__GLIBC__) || (__GLIBC__ < 2 || __GLIBC_MINOR__ < 25) + #define USE_DEV_URANDOM 1 + #else + #include // getrandom() + #endif #elif defined(__APPLE__) || defined(__unix__) #include // arc4random_buf() #endif @@ -67,8 +72,8 @@ static int lua_get_random_bytes(lua_State* L) { return 2; } -#elif defined(__linux__) - // Use getrandom() on Linux (Kernel 3.17+, 2014) +#elif defined(__linux__) && !defined(USE_DEV_URANDOM) + // Use getrandom() on Linux while (total_read < num_bytes) { ssize_t n = getrandom(buffer + total_read, num_bytes - total_read, 0); if (n < 0) { @@ -80,7 +85,7 @@ static int lua_get_random_bytes(lua_State* L) { total_read += n; } -#elif defined(__APPLE__) || defined(__unix__) +#elif defined(__APPLE__) || (defined(__unix__) && !defined(USE_DEV_URANDOM)) // Use arc4random_buf() on BSD/macOS arc4random_buf(buffer, num_bytes); -- cgit v1.2.3-55-g6feb