From c1327142b544ca4376a16c979ff1a3e8fa38df0c Mon Sep 17 00:00:00 2001 From: nhmall Date: Sat, 26 Jan 2019 11:26:02 -0500 Subject: [PATCH] detect DEV_RANDOM fopen failure and fall back, noting it in paniclog --- sys/unix/unixmain.c | 26 ++++++++++++++++---------- 1 file changed, 16 insertions(+), 10 deletions(-) diff --git a/sys/unix/unixmain.c b/sys/unix/unixmain.c index 0a1f469a7..1d6500b68 100644 --- a/sys/unix/unixmain.c +++ b/sys/unix/unixmain.c @@ -770,24 +770,30 @@ sys_random_seed() { unsigned long seed; unsigned long pid = (unsigned long) getpid(); + boolean no_seed = TRUE; #ifdef DEV_RANDOM FILE *fptr = NULL; fptr = fopen(DEV_RANDOM, "r"); if (fptr) { fread(&seed, sizeof(long), 1, fptr); - has_strong_rngseed = TRUE; - } - fclose(fptr); -#else - 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; + has_strong_rngseed = TRUE; /* decl.c */ + no_seed = FALSE; + fclose(fptr); + } else { + /* leaves clue, doesn't exit */ + paniclog("sys_random_seed", "falling back to weak seed"); } #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; } -- 2.49.0