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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user