]> git.proxmox.com Git - qemu.git/commitdiff
S390: fix error handling on kernel and initrd failures
authorChristian Borntraeger <borntraeger@de.ibm.com>
Sun, 22 Apr 2012 23:52:20 +0000 (23:52 +0000)
committerAlexander Graf <agraf@suse.de>
Tue, 1 May 2012 19:04:06 +0000 (21:04 +0200)
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>
hw/s390-virtio.c

index c79784c0c8eb0b95014a44bb6da097b2cb089f78..d17602f939589eff9cfa499679ef132263233d1c 100644 (file)
@@ -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);