seedrng: prepare read_new_seed() to not need a "success" retval
We do not expect /dev/[u]random to be not openable/readable. If they are, just bail out (something is obviously very wrong). function old new delta seedrng_main 1077 1076 -1 .rodata 104939 104929 -10 Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
parent
0fa16fc7a2
commit
282b61a649
@ -79,25 +79,27 @@ static int read_new_seed(uint8_t *seed, size_t len, bool *is_creditable)
|
|||||||
{
|
{
|
||||||
ssize_t ret;
|
ssize_t ret;
|
||||||
|
|
||||||
*is_creditable = false;
|
|
||||||
ret = getrandom(seed, len, GRND_NONBLOCK);
|
ret = getrandom(seed, len, GRND_NONBLOCK);
|
||||||
if (ret == (ssize_t)len) {
|
if (ret == (ssize_t)len) {
|
||||||
*is_creditable = true;
|
*is_creditable = true;
|
||||||
return 0;
|
return 0;
|
||||||
} else if (ret < 0 && errno == ENOSYS) {
|
}
|
||||||
|
if (ret < 0 && errno == ENOSYS) {
|
||||||
struct pollfd random_fd = {
|
struct pollfd random_fd = {
|
||||||
.fd = open("/dev/random", O_RDONLY),
|
.fd = xopen("/dev/random", O_RDONLY),
|
||||||
.events = POLLIN
|
.events = POLLIN
|
||||||
};
|
};
|
||||||
if (random_fd.fd < 0)
|
|
||||||
return -1;
|
|
||||||
*is_creditable = poll(&random_fd, 1, 0) == 1;
|
*is_creditable = poll(&random_fd, 1, 0) == 1;
|
||||||
close(random_fd.fd);
|
close(random_fd.fd);
|
||||||
} else if (getrandom(seed, len, GRND_INSECURE) == (ssize_t)len)
|
} else {
|
||||||
return 0;
|
*is_creditable = false;
|
||||||
if (open_read_close("/dev/urandom", seed, len) == (ssize_t)len)
|
if (getrandom(seed, len, GRND_INSECURE) == (ssize_t)len)
|
||||||
return 0;
|
return 0;
|
||||||
return -1;
|
}
|
||||||
|
errno = 0;
|
||||||
|
if (open_read_close("/dev/urandom", seed, len) != (ssize_t)len)
|
||||||
|
bb_perror_msg_and_die("can't read '%s'", "/dev/urandom");
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void seed_rng(uint8_t *seed, size_t len, bool credit)
|
static void seed_rng(uint8_t *seed, size_t len, bool credit)
|
||||||
|
Loading…
Reference in New Issue
Block a user