blob: 8aa13bf8b8122a3184428797a4fdc058db54e683 [file] [log] [blame]
rng-tools: modify 'read error' message
Make the 'read error' message more descriptive.
Copied from https://bugzilla.redhat.com/attachment.cgi?id=1295857
and modified in one place to apply successfully. Error message during
bootstrap modified to show device name.
Upstream-Status: pending
Signed-off-by: Joe Slater <joe.slater@windriver.com>
--- a/rngd.c
+++ b/rngd.c
@@ -247,8 +247,11 @@ static void do_loop(int random_step)
continue; /* failed, no work */
retval = iter->xread(buf, sizeof buf, iter);
- if (retval)
+ if (retval) {
+ message(LOG_DAEMON|LOG_ERR,
+ "Error reading from entropy source\n");
continue; /* failed, no work */
+ }
work_done = true;
--- a/rngd_entsource.c
+++ b/rngd_entsource.c
@@ -63,10 +63,8 @@ int xread(void *buf, size_t size, struct
size -= r;
}
- if (size) {
- message(LOG_DAEMON|LOG_ERR, "read error\n");
+ if (size)
return -1;
- }
return 0;
}
@@ -152,7 +150,7 @@ error_out:
}
/* Initialize entropy source */
-static int discard_initial_data(struct rng *ent_src)
+static int discard_initial_data(struct rng *ent_src, int *buf)
{
/* Trash 32 bits of what is probably stale (non-random)
* initial state from the RNG. For Intel's, 8 bits would
@@ -164,10 +162,12 @@ static int discard_initial_data(struct r
xread(tempbuf, sizeof(tempbuf), ent_src);
/* Return 32 bits of bootstrap data */
- xread(tempbuf, sizeof(tempbuf), ent_src);
+ if (xread(tempbuf, sizeof(tempbuf), ent_src) != 0)
+ return -1;
- return tempbuf[0] | (tempbuf[1] << 8) |
+ *buf = tempbuf[0] | (tempbuf[1] << 8) |
(tempbuf[2] << 16) | (tempbuf[3] << 24);
+ return 0;
}
/*
@@ -175,6 +175,8 @@ static int discard_initial_data(struct r
*/
int init_entropy_source(struct rng *ent_src)
{
+ int bootstrap;
+
ent_src->rng_fd = open(ent_src->rng_name, O_RDONLY);
if (ent_src->rng_fd == -1) {
return 1;
@@ -182,7 +184,11 @@ int init_entropy_source(struct rng *ent_
src_list_add(ent_src);
/* Bootstrap FIPS tests */
ent_src->fipsctx = malloc(sizeof(fips_ctx_t));
- fips_init(ent_src->fipsctx, discard_initial_data(ent_src));
+ if (discard_initial_data(ent_src, &bootstrap) != 0) {
+ message(LOG_ERR|LOG_INFO, "Read failure in %s during bootstrap\n",ent_src->rng_name);
+ return 1;
+ }
+ fips_init(ent_src->fipsctx, bootstrap);
return 0;
}
--- a/rngtest.c
+++ b/rngtest.c
@@ -335,6 +335,7 @@ static int discard_initial_data(void)
return tempbuf[0] | (tempbuf[1] << 8) |
(tempbuf[2] << 16) | (tempbuf[3] << 24);
+
}
static void do_rng_fips_test_loop( void )