Fix a bug where this function overflowed it's buffer... This was
causing ZFS panics on boot... This is purely reviewed and tested by peter. Reviewed by: peter Approved by: so (implicit), peter
This commit is contained in:
parent
bd9cab6fb4
commit
5da74e04ec
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=278927
@ -432,6 +432,7 @@ reseed(u_int fastslow)
|
||||
void
|
||||
random_yarrow_read(uint8_t *buf, u_int bytecount)
|
||||
{
|
||||
uint8_t tbuf[BLOCKSIZE];
|
||||
u_int blockcount, i;
|
||||
|
||||
/* Check for initial/final read requests */
|
||||
@ -448,8 +449,15 @@ random_yarrow_read(uint8_t *buf, u_int bytecount)
|
||||
yarrow_state.outputblocks = 0;
|
||||
}
|
||||
uint128_increment(&yarrow_state.counter.whole);
|
||||
randomdev_encrypt(&yarrow_state.key, yarrow_state.counter.byte, buf, BLOCKSIZE);
|
||||
buf += BLOCKSIZE;
|
||||
if ((i + 1) * BLOCKSIZE > bytecount) {
|
||||
randomdev_encrypt(&yarrow_state.key,
|
||||
yarrow_state.counter.byte, tbuf, BLOCKSIZE);
|
||||
memcpy(buf, tbuf, bytecount - i * BLOCKSIZE);
|
||||
} else {
|
||||
randomdev_encrypt(&yarrow_state.key,
|
||||
yarrow_state.counter.byte, buf, BLOCKSIZE);
|
||||
buf += BLOCKSIZE;
|
||||
}
|
||||
}
|
||||
|
||||
mtx_unlock(&random_reseed_mtx);
|
||||
|
Loading…
Reference in New Issue
Block a user