hw/misc/bcm2835_rng: Use qemu_guest_getrandom_nofail

The random number is intended for use by the guest.  As such, we should
honor the -seed argument for reproducibility.  Use the *_nofail routine
instead of rolling our own error handling locally.

Reviewed-by: Laurent Vivier <lvivier@redhat.com>
Reviewed-by: Philippe Mathieu-Daudé <philmd@redhat.com>
Signed-off-by: Richard Henderson <richard.henderson@linaro.org>
This commit is contained in:
Richard Henderson 2019-03-14 15:56:52 -07:00
parent 19173fd335
commit 3090c980ed

View File

@ -9,30 +9,26 @@
#include "qemu/osdep.h" #include "qemu/osdep.h"
#include "qemu/log.h" #include "qemu/log.h"
#include "qapi/error.h" #include "qemu/guest-random.h"
#include "crypto/random.h"
#include "hw/misc/bcm2835_rng.h" #include "hw/misc/bcm2835_rng.h"
static uint32_t get_random_bytes(void) static uint32_t get_random_bytes(void)
{ {
uint32_t res; uint32_t res;
Error *err = NULL;
if (qcrypto_random_bytes((uint8_t *)&res, sizeof(res), &err) < 0) { /*
/* On failure we don't want to return the guest a non-random * On failure we don't want to return the guest a non-random
* value in case they're really using it for cryptographic * value in case they're really using it for cryptographic
* purposes, so the best we can do is die here. * purposes, so the best we can do is die here.
* This shouldn't happen unless something's broken. * This shouldn't happen unless something's broken.
* In theory we could implement this device's full FIFO * In theory we could implement this device's full FIFO
* and interrupt semantics and then just stop filling the * and interrupt semantics and then just stop filling the
* FIFO. That's a lot of work, though, so we assume any * FIFO. That's a lot of work, though, so we assume any
* errors are systematic problems and trust that if we didn't * errors are systematic problems and trust that if we didn't
* fail as the guest inited then we won't fail later on * fail as the guest inited then we won't fail later on
* mid-run. * mid-run.
*/ */
error_report_err(err); qemu_guest_getrandom_nofail(&res, sizeof(res));
exit(1);
}
return res; return res;
} }