[libvirt] [PATCH 2/4] xkcd: enable more efficient random number generator
Andrea Bolognani
abologna at redhat.com
Fri Apr 1 12:06:36 UTC 2016
On Fri, 2016-04-01 at 12:30 +0100, Daniel P. Berrange wrote:
> XKCD comic 221 provides a very efficient algorithm for
> a random number generator, which we can utilize in
> libvirt. This is enabled simply
>
> LIBVIRT_XKCD=221 /usr/sbin/libvirt
>
> The effect can be seen when defining new guests without
> a MAC address
>
> # virsh define demo.xml
> # virsh dumpxml demo | grep mac
> <mac address='52:54:00:04:04:04'/>
>
> Signed-off-by: Daniel P. Berrange <berrange at redhat.com>
> ---
> src/util/virrandom.c | 26 ++++++++++++++++----------
> 1 file changed, 16 insertions(+), 10 deletions(-)
>
> diff --git a/src/util/virrandom.c b/src/util/virrandom.c
> index 67a8bd0..31d2a8f 100644
> --- a/src/util/virrandom.c
> +++ b/src/util/virrandom.c
> @@ -34,6 +34,7 @@
> #include "virerror.h"
> #include "virlog.h"
> #include "virstring.h"
> +#include "virxkcd.h"
>
> #define VIR_FROM_THIS VIR_FROM_NONE
>
> @@ -107,19 +108,24 @@ uint64_t virRandomBits(int nbits)
> return 0;
> }
>
> - virMutexLock(&randomLock);
> + if (virXKCDIsEnabled(221)) {
> + return 4; /* chosen by fair dice roll.
> + * guaranteed to be random. */
> + } else {
> + virMutexLock(&randomLock);
>
> - while (nbits > RANDOM_BITS_PER_ITER) {
> - random_r(&randomData, &bits);
> - ret = (ret << RANDOM_BITS_PER_ITER) | (bits & RANDOM_BITS_MASK);
> - nbits -= RANDOM_BITS_PER_ITER;
> - }
> + while (nbits > RANDOM_BITS_PER_ITER) {
> + random_r(&randomData, &bits);
> + ret = (ret << RANDOM_BITS_PER_ITER) | (bits & RANDOM_BITS_MASK);
> + nbits -= RANDOM_BITS_PER_ITER;
> + }
>
> - random_r(&randomData, &bits);
> - ret = (ret << nbits) | (bits & ((1 << nbits) - 1));
> + random_r(&randomData, &bits);
> + ret = (ret << nbits) | (bits & ((1 << nbits) - 1));
>
> - virMutexUnlock(&randomLock);
> - return ret;
> + virMutexUnlock(&randomLock);
> + return ret;
> + }
> }
Sorry, but we don't have any proof that the value '4' was
actually obtained with a fair dice roll.
If you can provide video footage of either yourself or
Randall Munroe rolling a dice and getting a four, then
it's an ACK from me.
Cheers.
--
Andrea Bolognani
Software Engineer - Virtualization Team
More information about the libvir-list
mailing list