From 991280175b4fe14d73c6361a6ee07716d30983c4 Mon Sep 17 00:00:00 2001 From: Kim Alvefur Date: Sat, 2 Dec 2017 10:58:37 +0100 Subject: util.crand: Try getrandom() again until buffer is filled --- util-src/crand.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) (limited to 'util-src/crand.c') diff --git a/util-src/crand.c b/util-src/crand.c index 762f7454..2996b84d 100644 --- a/util-src/crand.c +++ b/util-src/crand.c @@ -68,12 +68,22 @@ int Lrandom(lua_State *L) { * This acts like a read from /dev/urandom with the exception that it * *does* block if the entropy pool is not yet initialized. */ - ret = getrandom(buf, len, 0); + int left = len; + char *b = buf; - if(ret < 0) { - lua_pushstring(L, strerror(errno)); - return lua_error(L); - } + do { + ret = getrandom(b, left, 0); + + if(ret < 0) { + lua_pushstring(L, strerror(errno)); + return lua_error(L); + } + + b += ret; + left -= ret; + } while(left > 0); + + ret = len; #elif defined(WITH_ARC4RANDOM) arc4random_buf(buf, len); -- cgit v1.2.3