detect DEV_RANDOM fopen failure and fall back, noting it in paniclog

This commit is contained in:
nhmall
2019-01-28 10:32:57 +01:00
committed by Patric Mueller
parent 0aa4d62a2c
commit c1327142b5
+16 -10
View File
@@ -770,24 +770,30 @@ sys_random_seed()
{ {
unsigned long seed; unsigned long seed;
unsigned long pid = (unsigned long) getpid(); unsigned long pid = (unsigned long) getpid();
boolean no_seed = TRUE;
#ifdef DEV_RANDOM #ifdef DEV_RANDOM
FILE *fptr = NULL; FILE *fptr = NULL;
fptr = fopen(DEV_RANDOM, "r"); fptr = fopen(DEV_RANDOM, "r");
if (fptr) { if (fptr) {
fread(&seed, sizeof(long), 1, fptr); fread(&seed, sizeof(long), 1, fptr);
has_strong_rngseed = TRUE; has_strong_rngseed = TRUE; /* decl.c */
} no_seed = FALSE;
fclose(fptr); fclose(fptr);
#else } else {
seed = (unsigned long) getnow(); /* time((TIME_type) 0) */ /* leaves clue, doesn't exit */
/* Quick dirty band-aid to prevent PRNG prediction */ paniclog("sys_random_seed", "falling back to weak seed");
if (pid) {
if (!(pid & 3L))
pid -= 1L;
seed *= pid;
} }
#endif #endif
if (no_seed) {
seed = (unsigned long) getnow(); /* time((TIME_type) 0) */
/* Quick dirty band-aid to prevent PRNG prediction */
if (pid) {
if (!(pid & 3L))
pid -= 1L;
seed *= pid;
}
}
return seed; return seed;
} }