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)
|
||||
{
|
||||
uint8_t *random_buf;
|
||||
int error;
|
||||
int error, spamcount;
|
||||
ssize_t read_len, total_read, c;
|
||||
|
||||
random_buf = malloc(PAGE_SIZE, M_ENTROPY, M_WAITOK);
|
||||
random_alg_context.ra_pre_read();
|
||||
/* (Un)Blocking logic */
|
||||
error = 0;
|
||||
spamcount = 0;
|
||||
/* (Un)Blocking logic */
|
||||
while (!random_alg_context.ra_seeded()) {
|
||||
if (nonblock) {
|
||||
error = EWOULDBLOCK;
|
||||
break;
|
||||
}
|
||||
tsleep(&random_alg_context, 0, "randseed", hz/10);
|
||||
/* keep tapping away at the pre-read until we seed/unblock. */
|
||||
random_alg_context.ra_pre_read();
|
||||
/* 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 !defined(RANDOM_DUMMY)
|
||||
|
Loading…
Reference in New Issue
Block a user