Rather than throwing an assertion, provide a more detailed report if a flash image is inappropriately sized or aligned.
Signed-off-by: David Edmondson <david.edmond...@oracle.com> --- hw/arm/virt.c | 16 ++++++++++++++-- 1 file changed, 14 insertions(+), 2 deletions(-) diff --git a/hw/arm/virt.c b/hw/arm/virt.c index 27dbeb549e..2ba83dd18b 100644 --- a/hw/arm/virt.c +++ b/hw/arm/virt.c @@ -967,9 +967,21 @@ static void virt_flash_map1(PFlashCFI01 *flash, MemoryRegion *sysmem) { DeviceState *dev = DEVICE(flash); + const char *name = blk_name(pflash_cfi01_get_blk(flash)); + + if (size == 0 || !QEMU_IS_ALIGNED(size, VIRT_FLASH_SECTOR_SIZE)) { + error_report("system firmware block device '%s' has invalid size " + "%" PRId64, name, size); + info_report("its size must be a non-zero multiple of 0x%" PRIx64, + VIRT_FLASH_SECTOR_SIZE); + exit(1); + } + if (!(size / VIRT_FLASH_SECTOR_SIZE <= UINT32_MAX)) { + error_report("system firmware block device '%s' is too large " + "(%" PRId64 ")", name, size); + exit(1); + } - assert(QEMU_IS_ALIGNED(size, VIRT_FLASH_SECTOR_SIZE)); - assert(size / VIRT_FLASH_SECTOR_SIZE <= UINT32_MAX); qdev_prop_set_uint32(dev, "num-blocks", size / VIRT_FLASH_SECTOR_SIZE); sysbus_realize_and_unref(SYS_BUS_DEVICE(dev), &error_fatal); -- 2.29.2