mirror of
https://github.com/zerotier/ZeroTierOne.git
synced 2025-06-05 03:53:44 +02:00
Try reopening /dev/urandom if there is a problem.
This commit is contained in:
parent
64aaea3978
commit
598a1d8dd7
1 changed files with 11 additions and 5 deletions
|
@ -181,7 +181,7 @@ void Utils::getSecureRandom(void *buf,unsigned int bytes)
|
||||||
|
|
||||||
#ifdef __UNIX_LIKE__
|
#ifdef __UNIX_LIKE__
|
||||||
|
|
||||||
static char randomBuf[65536];
|
static char randomBuf[131072];
|
||||||
static unsigned int randomPtr = sizeof(randomBuf);
|
static unsigned int randomPtr = sizeof(randomBuf);
|
||||||
static int devURandomFd = -1;
|
static int devURandomFd = -1;
|
||||||
static Mutex globalLock;
|
static Mutex globalLock;
|
||||||
|
@ -199,10 +199,16 @@ void Utils::getSecureRandom(void *buf,unsigned int bytes)
|
||||||
|
|
||||||
for(unsigned int i=0;i<bytes;++i) {
|
for(unsigned int i=0;i<bytes;++i) {
|
||||||
if (randomPtr >= sizeof(randomBuf)) {
|
if (randomPtr >= sizeof(randomBuf)) {
|
||||||
if ((int)::read(devURandomFd,randomBuf,sizeof(randomBuf)) != (int)sizeof(randomBuf)) {
|
for(;;) {
|
||||||
fprintf(stderr,"FATAL ERROR: Utils::getSecureRandom() unable to read from /dev/urandom\n");
|
if ((int)::read(devURandomFd,randomBuf,sizeof(randomBuf)) != (int)sizeof(randomBuf)) {
|
||||||
exit(1);
|
::close(devURandomFd);
|
||||||
return;
|
devURandomFd = ::open("/dev/urandom",O_RDONLY);
|
||||||
|
if (devURandomFd <= 0) {
|
||||||
|
fprintf(stderr,"FATAL ERROR: Utils::getSecureRandom() unable to open /dev/urandom\n");
|
||||||
|
exit(1);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
} else break;
|
||||||
}
|
}
|
||||||
randomPtr = 0;
|
randomPtr = 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue