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

Reply via email to