Fix the read blocking so that it is interruptable and slow down the rate of console warning spamming while blocked.
Approved by: so (/dev/random blanket)
This commit is contained in:
parent
d657959305
commit
dbefaadca8
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=285692
@ -163,22 +163,28 @@ int
|
|||||||
read_random_uio(struct uio *uio, bool nonblock)
|
read_random_uio(struct uio *uio, bool nonblock)
|
||||||
{
|
{
|
||||||
uint8_t *random_buf;
|
uint8_t *random_buf;
|
||||||
int error;
|
int error, spamcount;
|
||||||
ssize_t read_len, total_read, c;
|
ssize_t read_len, total_read, c;
|
||||||
|
|
||||||
random_buf = malloc(PAGE_SIZE, M_ENTROPY, M_WAITOK);
|
random_buf = malloc(PAGE_SIZE, M_ENTROPY, M_WAITOK);
|
||||||
random_alg_context.ra_pre_read();
|
random_alg_context.ra_pre_read();
|
||||||
/* (Un)Blocking logic */
|
|
||||||
error = 0;
|
error = 0;
|
||||||
|
spamcount = 0;
|
||||||
|
/* (Un)Blocking logic */
|
||||||
while (!random_alg_context.ra_seeded()) {
|
while (!random_alg_context.ra_seeded()) {
|
||||||
if (nonblock) {
|
if (nonblock) {
|
||||||
error = EWOULDBLOCK;
|
error = EWOULDBLOCK;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
tsleep(&random_alg_context, 0, "randseed", hz/10);
|
|
||||||
/* keep tapping away at the pre-read until we seed/unblock. */
|
/* keep tapping away at the pre-read until we seed/unblock. */
|
||||||
random_alg_context.ra_pre_read();
|
random_alg_context.ra_pre_read();
|
||||||
printf("random: %s unblock wait\n", __func__);
|
/* Only bother the console every 10 seconds or so */
|
||||||
|
if (spamcount == 0)
|
||||||
|
printf("random: %s unblock wait\n", __func__);
|
||||||
|
spamcount = (spamcount + 1)%100;
|
||||||
|
error = tsleep(&random_alg_context, PCATCH, "randseed", hz/10);
|
||||||
|
if ((error == ERESTART | error == EINTR))
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (error == 0) {
|
if (error == 0) {
|
||||||
#if !defined(RANDOM_DUMMY)
|
#if !defined(RANDOM_DUMMY)
|
||||||
|
Loading…
Reference in New Issue
Block a user