[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