Hello guys, I've looked at FreeBSD 8.0 cryptographically secure pseudorandom numbers generator and have a question. It looks like a bug but I'am not sure.
In file sys/dev/randomdev.c, function random_read: if (!random_systat.seeded) error = (*random_systat.block)(flag); It blocks until PRNG is seeded. For software random generator implementation block method looks as follows, sys/dev/randomdev_soft.c: random_yarrow_block(int flag) { int error = 0; mtx_lock(&random_reseed_mtx); /* Blocking logic */ while (random_systat.seeded && !error) { if (flag & O_NONBLOCK) error = EWOULDBLOCK; else { printf("Entropy device is blocking.\n"); error = msleep(&random_systat, &random_reseed_mtx, PUSER | PCATCH, "block", 0); } } mtx_unlock(&random_reseed_mtx); return error; } It seems that random_systat.seeded in "while" condition should be negated. Or it will never block actually, or block erroneously until next reseed (under very rare conditions) Am I right? Thanks. _______________________________________________ freebsd-hackers@freebsd.org mailing list http://lists.freebsd.org/mailman/listinfo/freebsd-hackers To unsubscribe, send any mail to "freebsd-hackers-unsubscr...@freebsd.org"