mirror of https://gitlab.com/qemu-project/qemu
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>
This commit is contained in:
parent
cc3c7384ac
commit
118a897743
|
@ -230,6 +230,11 @@ static void s390_init(ram_addr_t my_ram_size,
|
||||||
if (kernel_size == -1UL) {
|
if (kernel_size == -1UL) {
|
||||||
kernel_size = load_image_targphys(kernel_filename, 0, ram_size);
|
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
|
* 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
|
* 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,
|
initrd_size = load_image_targphys(initrd_filename, initrd_offset,
|
||||||
ram_size - 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" */
|
/* 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_START), &initrd_offset, 8);
|
||||||
memcpy(rom_ptr(INITRD_PARM_SIZE), &initrd_size, 8);
|
memcpy(rom_ptr(INITRD_PARM_SIZE), &initrd_size, 8);
|
||||||
|
|
Loading…
Reference in New Issue