| 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 ) |