Commit 5cb89d9a authored by Poul-Henning Kamp's avatar Poul-Henning Kamp Committed by Tollef Fog Heen

Don't ignore the return value of the read(2) call on a random dev.

parent f4c29c72
...@@ -40,6 +40,22 @@ ...@@ -40,6 +40,22 @@
#include "compat/srandomdev.h" #include "compat/srandomdev.h"
static int
trydev(const char *fn, unsigned long *seed)
{
int fd;
ssize_t sz;
fd = open(fn, O_RDONLY);
if (fd < 0)
return (-1);
sz = read(fd, seed, sizeof *seed);
(void)close(fd);
if (sz != sizeof *seed)
return (-1);
return (0);
}
void void
srandomdev(void) srandomdev(void)
{ {
...@@ -47,13 +63,11 @@ srandomdev(void) ...@@ -47,13 +63,11 @@ srandomdev(void)
unsigned long seed; unsigned long seed;
int fd; int fd;
if ((fd = open("/dev/urandom", O_RDONLY)) >= 0 || if (trydev("/dev/urandom", &seed)) {
(fd = open("/dev/random", O_RDONLY)) >= 0) { if (trydev("/dev/random", &seed)) {
read(fd, &seed, sizeof seed); gettimeofday(&tv, NULL);
close(fd); seed = (getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec;
} else { }
gettimeofday(&tv, NULL);
seed = (getpid() << 16) ^ tv.tv_sec ^ tv.tv_usec;
} }
srandom(seed); srandom(seed);
} }
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment