qemu-ppc
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] hw/ppc: pass random seed to fdt


From: Daniel Henrique Barboza
Subject: Re: [PATCH] hw/ppc: pass random seed to fdt
Date: Thu, 14 Jul 2022 10:01:35 -0300
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.10.0

Queued in gitlab.com/danielhb/qemu/tree/ppc-next. Thanks,


Daniel

On 7/12/22 10:51, Jason A. Donenfeld wrote:
If the FDT contains /chosen/rng-seed, then the Linux RNG will use it to
initialize early. Set this using the usual guest random number
generation function. This is confirmed to successfully initialize the
RNG on Linux 5.19-rc6. The rng-seed node is part of the DT spec. Set
this on the paravirt platforms, spapr and e500, just as is done on other
architectures with paravirt hardware.

Cc: Daniel Henrique Barboza <danielhb413@gmail.com>
Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com>
---
  hw/ppc/e500.c  | 5 +++++
  hw/ppc/spapr.c | 5 +++++
  2 files changed, 10 insertions(+)

diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index 7f7f5b3452..2f86eb490e 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -17,6 +17,7 @@
  #include "qemu/osdep.h"
  #include "qemu/datadir.h"
  #include "qemu/units.h"
+#include "qemu/guest-random.h"
  #include "qapi/error.h"
  #include "e500.h"
  #include "e500-ccsr.h"
@@ -346,6 +347,7 @@ static int ppce500_load_device_tree(PPCE500MachineState 
*pms,
          };
      const char *dtb_file = machine->dtb;
      const char *toplevel_compat = machine->dt_compatible;
+    uint8_t rng_seed[32];
if (dtb_file) {
          char *filename;
@@ -403,6 +405,9 @@ static int ppce500_load_device_tree(PPCE500MachineState 
*pms,
      if (ret < 0)
          fprintf(stderr, "couldn't set /chosen/bootargs\n");
+ qemu_guest_getrandom_nofail(rng_seed, sizeof(rng_seed));
+    qemu_fdt_setprop(fdt, "/chosen", "rng-seed", rng_seed, sizeof(rng_seed));
+
      if (kvm_enabled()) {
          /* Read out host's frequencies */
          clock_freq = kvmppc_get_clockfreq();
diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c
index 9a5382d527..3a5112899e 100644
--- a/hw/ppc/spapr.c
+++ b/hw/ppc/spapr.c
@@ -27,6 +27,7 @@
  #include "qemu/osdep.h"
  #include "qemu/datadir.h"
  #include "qemu/memalign.h"
+#include "qemu/guest-random.h"
  #include "qapi/error.h"
  #include "qapi/qapi-events-machine.h"
  #include "qapi/qapi-events-qdev.h"
@@ -1014,6 +1015,7 @@ static void spapr_dt_chosen(SpaprMachineState *spapr, 
void *fdt, bool reset)
  {
      MachineState *machine = MACHINE(spapr);
      SpaprMachineClass *smc = SPAPR_MACHINE_GET_CLASS(machine);
+    uint8_t rng_seed[32];
      int chosen;
_FDT(chosen = fdt_add_subnode(fdt, 0, "chosen"));
@@ -1091,6 +1093,9 @@ static void spapr_dt_chosen(SpaprMachineState *spapr, 
void *fdt, bool reset)
          spapr_dt_ov5_platform_support(spapr, fdt, chosen);
      }
+ qemu_guest_getrandom_nofail(rng_seed, sizeof(rng_seed));
+    _FDT(fdt_setprop(fdt, chosen, "rng-seed", rng_seed, sizeof(rng_seed)));
+
      _FDT(spapr_dt_ovec(fdt, chosen, spapr->ov5_cas, 
"ibm,architecture-vec-5"));
  }



reply via email to

[Prev in Thread] Current Thread [Next in Thread]