rng-tools: fix rngd_jitter initialization

rngd daemon may spam the console when using an older version
than 6.11.

Backport patches from https://github.com/nhorman/rng-tools/pull/99/commits

(From OE-Core rev: 28707d202e56c9fe12492e3370fb56d920560642)

Signed-off-by: Julien Massot <julien.massot@iot.bzh>
Signed-off-by: Steve Sakoman <steve@sakoman.com>
Signed-off-by: Richard Purdie <richard.purdie@linuxfoundation.org>
This commit is contained in:
Julien Massot
2021-02-03 16:28:37 +01:00
committed by Richard Purdie
parent fb3995faec
commit 36688f92e7
4 changed files with 105 additions and 0 deletions

View File

@@ -0,0 +1,26 @@
From 6ce86cb5cf06541cd5aad70fe8494b07b22c247e Mon Sep 17 00:00:00 2001
From: Matthias Schiffer <matthias.schiffer@tq-group.com>
Date: Wed, 27 Jan 2021 16:10:32 +0100
Subject: [PATCH] rngd_jitter: fix O_NONBLOCK setting for entropy pipe
A pointer was passed to fcntl instead of the flags variable, setting
random flags.
Signed-off-by: Matthias Schiffer <matthias.schiffer@tq-group.com>
---
rngd_jitter.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rngd_jitter.c b/rngd_jitter.c
index 32bac53..25b3543 100644
--- a/rngd_jitter.c
+++ b/rngd_jitter.c
@@ -465,7 +465,7 @@ int init_jitter_entropy_source(struct rng *ent_src)
flags = fcntl(pipefds[0], F_GETFL, 0);
flags |= O_NONBLOCK;
- fcntl(pipefds[0], F_SETFL, &flags);
+ fcntl(pipefds[0], F_SETFL, flags);
if (ent_src->rng_options[JITTER_OPT_USE_AES].int_val) {
#ifdef HAVE_LIBGCRYPT

View File

@@ -0,0 +1,38 @@
From 330c2ba14510c8103b30d5021adb18f1534031a1 Mon Sep 17 00:00:00 2001
From: Matthias Schiffer <matthias.schiffer@tq-group.com>
Date: Wed, 27 Jan 2021 16:18:09 +0100
Subject: [PATCH] rngd_jitter: initialize AES key before setting the entropy
pipe to O_NONBLOCK
Signed-off-by: Matthias Schiffer <matthias.schiffer@tq-group.com>
---
rngd_jitter.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)
diff --git a/rngd_jitter.c b/rngd_jitter.c
index 25b3543..48f344c 100644
--- a/rngd_jitter.c
+++ b/rngd_jitter.c
@@ -463,10 +463,6 @@ int init_jitter_entropy_source(struct rng *ent_src)
pthread_mutex_unlock(&tdata[i].statemtx);
}
- flags = fcntl(pipefds[0], F_GETFL, 0);
- flags |= O_NONBLOCK;
- fcntl(pipefds[0], F_SETFL, flags);
-
if (ent_src->rng_options[JITTER_OPT_USE_AES].int_val) {
#ifdef HAVE_LIBGCRYPT
/*
@@ -487,6 +483,11 @@ int init_jitter_entropy_source(struct rng *ent_src)
ent_src->rng_options[JITTER_OPT_USE_AES].int_val = 1;
}
xread_jitter(aes_buf, tdata[0].buf_sz, ent_src);
+
+ flags = fcntl(pipefds[0], F_GETFL, 0);
+ flags |= O_NONBLOCK;
+ fcntl(pipefds[0], F_SETFL, flags);
+
#else
message_entsrc(ent_src,LOG_CONS|LOG_INFO, "libgcrypt not available. Disabling AES in JITTER source\n");
ent_src->rng_options[JITTER_OPT_USE_AES].int_val = 0;

View File

@@ -0,0 +1,38 @@
From 36bc92ef2789b13183c8895d83665f48b13c2b9e Mon Sep 17 00:00:00 2001
From: Matthias Schiffer <matthias.schiffer@tq-group.com>
Date: Wed, 27 Jan 2021 16:22:39 +0100
Subject: [PATCH] rngd_jitter: always read from entropy pipe before setting
O_NONBLOCK
Even with AES disabled, we want to make sure that jent_read_entropy() has
already generated some entropy before we consider the the source
initialized. Otherwise "Entropy Generation is slow" log spam will be
emitteded until this has happened, which can take several seconds.
Signed-off-by: Matthias Schiffer <matthias.schiffer@tq-group.com>
---
rngd_jitter.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/rngd_jitter.c b/rngd_jitter.c
index 48f344c..b736cdd 100644
--- a/rngd_jitter.c
+++ b/rngd_jitter.c
@@ -492,6 +492,17 @@ int init_jitter_entropy_source(struct rng *ent_src)
message_entsrc(ent_src,LOG_CONS|LOG_INFO, "libgcrypt not available. Disabling AES in JITTER source\n");
ent_src->rng_options[JITTER_OPT_USE_AES].int_val = 0;
#endif
+ } else {
+ /*
+ * Make sure that an entropy gathering thread has generated
+ * at least some entropy before setting O_NONBLOCK and finishing
+ * the entropy source initialization.
+ *
+ * This avoids "Entropy Generation is slow" log spamming that
+ * would otherwise happen until jent_read_entropy() has run
+ * for the first time.
+ */
+ xread_jitter(&i, 1, ent_src);
}
message_entsrc(ent_src,LOG_DAEMON|LOG_INFO, "Enabling JITTER rng support\n");
return 0;

View File

@@ -10,6 +10,9 @@ DEPENDS = "sysfsutils"
SRC_URI = "\
git://github.com/nhorman/rng-tools.git \
file://0001-rngd_jitter-fix-O_NONBLOCK-setting-for-entropy-pipe.patch \
file://0002-rngd_jitter-initialize-AES-key-before-setting-the-en.patch \
file://0003-rngd_jitter-always-read-from-entropy-pipe-before-set.patch \
file://init \
file://default \
file://rngd.service \