From 118a89774346e6a406cd44f403cb043a417066c9 Mon Sep 17 00:00:00 2001 From: Christian Borntraeger Date: Sun, 22 Apr 2012 23:52:20 +0000 Subject: S390: fix error handling on kernel and initrd failures If the user specifies a non-existing or non-accessable kernel or initrd qemu does not fail, instead it ipls into the system, which then falls into a program check loop due to the zeroed memory with no kernel. Lets add some sanity checks. Signed-off-by: Christian Borntraeger Signed-off-by: Alexander Graf --- hw/s390-virtio.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/hw/s390-virtio.c b/hw/s390-virtio.c index c79784c0c8..d17602f939 100644 --- a/hw/s390-virtio.c +++ b/hw/s390-virtio.c @@ -230,6 +230,11 @@ static void s390_init(ram_addr_t my_ram_size, if (kernel_size == -1UL) { kernel_size = load_image_targphys(kernel_filename, 0, ram_size); } + if (kernel_size == -1UL) { + fprintf(stderr, "qemu: could not load kernel '%s'\n", + kernel_filename); + exit(1); + } /* * we can not rely on the ELF entry point, since up to 3.2 this * value was 0x800 (the SALIPL loader) and it wont work. For @@ -269,6 +274,12 @@ static void s390_init(ram_addr_t my_ram_size, } initrd_size = load_image_targphys(initrd_filename, initrd_offset, ram_size - initrd_offset); + if (initrd_size == -1UL) { + fprintf(stderr, "qemu: could not load initrd '%s'\n", + initrd_filename); + exit(1); + } + /* we have to overwrite values in the kernel image, which are "rom" */ memcpy(rom_ptr(INITRD_PARM_START), &initrd_offset, 8); memcpy(rom_ptr(INITRD_PARM_SIZE), &initrd_size, 8); -- cgit v1.2.1