Ensure that the calculate initrd offset points to a valid address for the architecture.
Signed-off-by: Alistair Francis <alistair.fran...@wdc.com> Suggested-by: Alexander Graf <ag...@suse.de> Reported-by: Alexander Graf <ag...@suse.de> --- hw/riscv/virt.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hw/riscv/virt.c b/hw/riscv/virt.c index 2b38f89070..4467195fac 100644 --- a/hw/riscv/virt.c +++ b/hw/riscv/virt.c @@ -85,7 +85,12 @@ static hwaddr load_initrd(const char *filename, uint64_t mem_size, * halfway into RAM, and for boards with 256MB of RAM or more we put * the initrd at 128MB. */ - *start = kernel_entry + MIN(mem_size / 2, 128 * MiB); + /* As hwaddr is a 64-bit number we need to cast it for 32-bit */ +#if defined(TARGET_RISCV32) + *start = (uint32_t) (kernel_entry + MIN(mem_size / 2, 128ULL * MiB)); +#elif defined(TARGET_RISCV64) + *start = (uint64_t) (kernel_entry + MIN(mem_size / 2, 128 * MiB)); +#endif size = load_ramdisk(filename, *start, mem_size - *start); if (size == -1) { -- 2.19.1