On systems where adding entropy to /dev/random using ioctl(RNDADDENTROPY) is not allowed (notably: docker containers), avoid entering a busy loop that consumes high cpu, as the poll loop will keep firing.
Cc: Petr Štetiar <[email protected]> --- urngd.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/urngd.c b/urngd.c index 35ccdec..410d300 100644 --- a/urngd.c +++ b/urngd.c @@ -129,9 +129,14 @@ static size_t gather_entropy(struct urngd *u) static void low_entropy_cb(struct uloop_fd *ufd, unsigned int events) { struct urngd *u = container_of(ufd, struct urngd, rnd_fd); + size_t res; DEBUG(2, DEV_RANDOM " signals low entropy\n"); - gather_entropy(u); + res = gather_entropy(u); + if (!res) { + DEBUG(2, "gather_entropy failed, delaying further attempts\n"); + sleep(60); + } } static void urngd_done(struct urngd *u) -- Giovanni Giacobbi _______________________________________________ openwrt-devel mailing list [email protected] https://lists.openwrt.org/mailman/listinfo/openwrt-devel
