[PATCH urngd] Fix busy loop in case of ioctl(RNDADDENTROPY) failure

Giovanni Giacobbi giovanni at giacobbi.net
Sat Jan 30 08:45:21 EST 2021


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 <ynezz at true.cz>
---
 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




More information about the openwrt-devel mailing list