aboutsummaryrefslogtreecommitdiff
path: root/hw
diff options
context:
space:
mode:
authorChristian Borntraeger <borntraeger@de.ibm.com>2012-04-22 23:52:20 +0000
committerAlexander Graf <agraf@suse.de>2012-05-01 21:04:06 +0200
commit118a89774346e6a406cd44f403cb043a417066c9 (patch)
treede167a438e9733b30cb65550ec174d5767e5682e /hw
parentcc3c7384ac61728e9949d5e64c10664fe4510179 (diff)
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 <borntraeger@de.ibm.com> Signed-off-by: Alexander Graf <agraf@suse.de>
Diffstat (limited to 'hw')
-rw-r--r--hw/s390-virtio.c11
1 files changed, 11 insertions, 0 deletions
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);