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:
parent
19173fd335
commit
3090c980ed
@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user