From 236b7a0aef2189ee49d6ca82ebc3bf2e06fd623d Mon Sep 17 00:00:00 2001 From: Cristian Ciocaltea Date: Tue, 21 Jan 2020 16:43:24 +0200 Subject: [PATCH] Fix blocked entropy generation MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit The OpenWrt Jitter RNG daemon is currently unable to continuously provide entropy, except once on process startup. This patch brings the following fixes: - poll /dev/random for unblocking write operations, instead of read - register the low entropy callback after uloop initialization, not before Signed-off-by: Cristian Ciocaltea [commit subject tweak, uloop_done cleanup] Signed-off-by: Petr Å tetiar --- urngd.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/urngd.c b/urngd.c index d8ed159..35ccdec 100644 --- a/urngd.c +++ b/urngd.c @@ -180,7 +180,7 @@ static bool urngd_init(struct urngd *u) return false; } - uloop_fd_add(&u->rnd_fd, ULOOP_READ); + uloop_fd_add(&u->rnd_fd, ULOOP_WRITE); return true; } @@ -227,14 +227,16 @@ int main(int argc, char **argv) ulog_open(ulog_channels, LOG_DAEMON, "urngd"); - if (!urngd_init(&urngd_service)) + uloop_init(); + if (!urngd_init(&urngd_service)) { + uloop_done(); return -1; + } LOG("v%s started.\n", URNGD_VERSION); gather_entropy(&urngd_service); - uloop_init(); uloop_run(); uloop_done(); -- 2.30.2