Commit 3f74b632 authored by Richard Henderson's avatar Richard Henderson
Browse files

target/ppc: Use qemu_guest_getrandom for DARN



We now have an interface for guest visible random numbers.

Acked-by: default avatarDavid Gibson <david@gibson.dropbear.id.au>
Reviewed-by: default avatarLaurent Vivier <lvivier@redhat.com>
Signed-off-by: default avatarRichard Henderson <richard.henderson@linaro.org>
parent 7e4357f6
Loading
Loading
Loading
Loading
+26 −11
Original line number Diff line number Diff line
@@ -23,6 +23,8 @@
#include "exec/helper-proto.h"
#include "crypto/aes.h"
#include "fpu/softfloat.h"
#include "qapi/error.h"
#include "qemu/guest-random.h"

#include "helper_regs.h"
/*****************************************************************************/
@@ -158,24 +160,37 @@ uint32_t helper_cmpeqb(target_ulong ra, target_ulong rb)
#undef hasvalue

/*
 * Return invalid random number.
 *
 * FIXME: Add rng backend or other mechanism to get cryptographically suitable
 * random number
 * Return a random number.
 */
target_ulong helper_darn32(void)
uint64_t helper_darn32(void)
{
    Error *err = NULL;
    uint32_t ret;

    if (qemu_guest_getrandom(&ret, sizeof(ret), &err) < 0) {
        qemu_log_mask(LOG_UNIMP, "darn: Crypto failure: %s",
                      error_get_pretty(err));
        error_free(err);
        return -1;
    }

target_ulong helper_darn64(void)
    return ret;
}

uint64_t helper_darn64(void)
{
    Error *err = NULL;
    uint64_t ret;

    if (qemu_guest_getrandom(&ret, sizeof(ret), &err) < 0) {
        qemu_log_mask(LOG_UNIMP, "darn: Crypto failure: %s",
                      error_get_pretty(err));
        error_free(err);
        return -1;
    }

#endif

#if defined(TARGET_PPC64)
    return ret;
}

uint64_t helper_bpermd(uint64_t rs, uint64_t rb)
{