[libvirt] [PATCH for v4.6.0 0/2] Fix some random problems
Daniel P. Berrangé
berrange at redhat.com
Wed Aug 1 13:02:21 UTC 2018
On Wed, Aug 01, 2018 at 02:57:07PM +0200, Bjoern Walk wrote:
> And here's the fix for the viriscsitest on big-endian machine like
> Daniel suggested.
>
> Bjoern
>
> --
> IBM Systems
> Linux on Z & Virtualization Development
> ------------------------------------------------------------------------
> IBM Deutschland Research & Development GmbH
> Schönaicher Str. 220, 71032 Böblingen
> Phone: +49 7031 16 1819
> ------------------------------------------------------------------------
> Vorsitzende des Aufsichtsrats: Martina Koederitz
> Geschäftsführung: Dirk Wittkopp
> Sitz der Gesellschaft: Böblingen
> Registergericht: Amtsgericht Stuttgart, HRB 243294
> From d59b254294a90c5a9ca0fb6ad29465cd0950bb61 Mon Sep 17 00:00:00 2001
> From: Bjoern Walk <bwalk at linux.ibm.com>
> Date: Wed, 1 Aug 2018 14:48:47 +0200
> Subject: [PATCH] util: virrandom: make virRandomBits endian-safe
>
> Make the generation of random bits in virRandomBits independent of the
> endianness of the running architecture.
>
> This also solves problems with the mocked random byte generation on
> big-endian machines.
>
> Suggested-by: Daniel P. Berrangé <berrange at redhat.com>
> Signed-off-by: Bjoern Walk <bwalk at linux.ibm.com>
> ---
> src/util/virrandom.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/src/util/virrandom.c b/src/util/virrandom.c
> index 01cc82a0..a58ee97a 100644
> --- a/src/util/virrandom.c
> +++ b/src/util/virrandom.c
> @@ -34,6 +34,7 @@
> # include <gnutls/crypto.h>
> #endif
>
> +#include "virendian.h"
> #include "virrandom.h"
> #include "virthread.h"
> #include "count-one-bits.h"
> @@ -60,16 +61,15 @@ VIR_LOG_INIT("util.random");
> */
> uint64_t virRandomBits(int nbits)
> {
> - uint64_t ret = 0;
> + uint8_t ret[8];
>
> - if (virRandomBytes((unsigned char *) &ret, sizeof(ret)) < 0) {
> + if (virRandomBytes(ret, sizeof(ret)) < 0) {
> /* You're already hosed, so this particular non-random value
> * isn't any worse. */
> return 0;
> }
>
> - ret &= (1ULL << nbits) - 1;
> - return ret;
> + return virReadBufInt64LE(ret) & ((1ULL << nbits) - 1);
> }
Reviewed-by: Daniel P. Berrangé <berrange at redhat.com>
Regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|
More information about the libvir-list
mailing list