abort in srandomdev if kern.arandom sysctl fails

The sysctl cannot fail. If it does fail on some FreeBSD derivative or
after some future change, just abort() so that the problem will be found
and fixed.

While abort() is not normally suitable for a library, it makes sense
here.

This is akin to r306636 for arc4random.

Reviewed by:	ed
MFC after:	2 weeks
Sponsored by:	The FreeBSD Foundation
Differential Revision:	https://reviews.freebsd.org/D8077
This commit is contained in:
Ed Maste 2016-10-05 17:03:22 +00:00
parent e7798d20c5
commit 7e81ad1292

View File

@ -270,16 +270,17 @@ void
srandomdev(void)
{
int mib[2];
size_t len;
size_t expected, len;
if (rand_type == TYPE_0)
len = sizeof(state[0]);
expected = len = sizeof(state[0]);
else
len = rand_deg * sizeof(state[0]);
expected = len = rand_deg * sizeof(state[0]);
mib[0] = CTL_KERN;
mib[1] = KERN_ARND;
sysctl(mib, 2, state, &len, NULL, 0);
if (sysctl(mib, 2, state, &len, NULL, 0) == -1 || len != expected)
abort();
if (rand_type != TYPE_0) {
fptr = &state[rand_sep];