Software /
code /
prosody
Diff
util-src/crand.c @ 8443:980885ba062c
util.crand: Try getrandom() again until buffer is filled
author | Kim Alvefur <zash@zash.se> |
---|---|
date | Sat, 02 Dec 2017 10:58:37 +0100 |
parent | 8425:91c220f43826 |
child | 8444:adb079840714 |
line wrap: on
line diff
--- a/util-src/crand.c Sat Dec 02 02:12:06 2017 +0100 +++ b/util-src/crand.c Sat Dec 02 10:58:37 2017 +0100 @@ -68,12 +68,22 @@ * 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; + + do { + ret = getrandom(b, left, 0); - if(ret < 0) { - lua_pushstring(L, strerror(errno)); - return lua_error(L); - } + 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);