Skip to content

Commit

Permalink
qemu: simplify RNG seeding
Browse files Browse the repository at this point in the history
We don't actualy need to write anything in the pool. Instead, we just
force the total over 128, and we should be good to go for all old
kernels. We also only need this on getrandom() kernels, which simplifies
things too.

Signed-off-by: Jason A. Donenfeld <[email protected]>
  • Loading branch information
zx2c4 committed Mar 2, 2022
1 parent 4eff63d commit ffb8cd6
Showing 1 changed file with 8 additions and 18 deletions.
26 changes: 8 additions & 18 deletions src/tests/qemu/init.c
Original file line number Diff line number Diff line change
Expand Up @@ -58,27 +58,17 @@ static void print_banner(void)

static void seed_rng(void)
{
int fd;
struct {
int entropy_count;
int buffer_size;
unsigned char buffer[256];
} entropy = {
.entropy_count = sizeof(entropy.buffer) * 8,
.buffer_size = sizeof(entropy.buffer),
.buffer = "Adding real entropy is not actually important for these tests. Don't try this at home, kids!"
};
int bits = 4096, fd;

if (mknod("/dev/urandom", S_IFCHR | 0644, makedev(1, 9)))
panic("mknod(/dev/urandom)");
fd = open("/dev/urandom", O_WRONLY);
pretty_message("[+] Fake seeding RNG...");
fd = open("/dev/random", O_WRONLY);
if (fd < 0)
panic("open(urandom)");
panic("open(random)");
for (;;) {
if (getrandom(entropy.buffer, sizeof(entropy.buffer), GRND_NONBLOCK) != -1 || errno != EAGAIN)
if (!getrandom(NULL, 0, GRND_NONBLOCK) || errno == ENOSYS)
break;
if (ioctl(fd, RNDADDENTROPY, &entropy) < 0)
panic("ioctl(urandom)");
if (ioctl(fd, RNDADDTOENTCNT, &bits) < 0)
panic("ioctl(RNDADDTOENTCNT)");
}
close(fd);
}
Expand Down Expand Up @@ -274,10 +264,10 @@ static void check_leaks(void)

int main(int argc, char *argv[])
{
seed_rng();
ensure_console();
print_banner();
mount_filesystems();
seed_rng();
kmod_selftests();
enable_logging();
clear_leaks();
Expand Down

0 comments on commit ffb8cd6

Please sign in to comment.