device-tree: add re-randomization helper function
When the system reboots, the rng-seed that the FDT has should be re-randomized, so that the new boot gets a new seed. Several architectures require this functionality, so export a function for injecting a new seed into the given FDT. Cc: Alistair Francis <alistair.francis@wdc.com> Cc: David Gibson <david@gibson.dropbear.id.au> Signed-off-by: Jason A. Donenfeld <Jason@zx2c4.com> Reviewed-by: Alistair Francis <alistair.francis@wdc.com> Message-id: 20221025004327.568476-3-Jason@zx2c4.com Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
This commit is contained in:
parent
7966d70f6f
commit
e1e618b9a0
@ -197,6 +197,15 @@ int qemu_fdt_setprop_sized_cells_from_array(void *fdt,
|
|||||||
qdt_tmp); \
|
qdt_tmp); \
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
* qemu_fdt_randomize_seeds:
|
||||||
|
* @fdt: device tree blob
|
||||||
|
*
|
||||||
|
* Re-randomize all "rng-seed" properties with new seeds.
|
||||||
|
*/
|
||||||
|
void qemu_fdt_randomize_seeds(void *fdt);
|
||||||
|
|
||||||
#define FDT_PCI_RANGE_RELOCATABLE 0x80000000
|
#define FDT_PCI_RANGE_RELOCATABLE 0x80000000
|
||||||
#define FDT_PCI_RANGE_PREFETCHABLE 0x40000000
|
#define FDT_PCI_RANGE_PREFETCHABLE 0x40000000
|
||||||
#define FDT_PCI_RANGE_ALIASED 0x20000000
|
#define FDT_PCI_RANGE_ALIASED 0x20000000
|
||||||
|
@ -22,6 +22,7 @@
|
|||||||
#include "qemu/option.h"
|
#include "qemu/option.h"
|
||||||
#include "qemu/bswap.h"
|
#include "qemu/bswap.h"
|
||||||
#include "qemu/cutils.h"
|
#include "qemu/cutils.h"
|
||||||
|
#include "qemu/guest-random.h"
|
||||||
#include "sysemu/device_tree.h"
|
#include "sysemu/device_tree.h"
|
||||||
#include "hw/loader.h"
|
#include "hw/loader.h"
|
||||||
#include "hw/boards.h"
|
#include "hw/boards.h"
|
||||||
@ -680,3 +681,23 @@ void hmp_dumpdtb(Monitor *mon, const QDict *qdict)
|
|||||||
|
|
||||||
info_report("dtb dumped to %s", filename);
|
info_report("dtb dumped to %s", filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void qemu_fdt_randomize_seeds(void *fdt)
|
||||||
|
{
|
||||||
|
int noffset, poffset, len;
|
||||||
|
const char *name;
|
||||||
|
uint8_t *data;
|
||||||
|
|
||||||
|
for (noffset = fdt_next_node(fdt, 0, NULL);
|
||||||
|
noffset >= 0;
|
||||||
|
noffset = fdt_next_node(fdt, noffset, NULL)) {
|
||||||
|
for (poffset = fdt_first_property_offset(fdt, noffset);
|
||||||
|
poffset >= 0;
|
||||||
|
poffset = fdt_next_property_offset(fdt, poffset)) {
|
||||||
|
data = (uint8_t *)fdt_getprop_by_offset(fdt, poffset, &name, &len);
|
||||||
|
if (!data || strcmp(name, "rng-seed"))
|
||||||
|
continue;
|
||||||
|
qemu_guest_getrandom_nofail(data, len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user