aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJared Rossi <jrossi@linux.ibm.com>2025-01-17 16:22:35 -0500
committerThomas Huth <thuth@redhat.com>2025-01-22 08:28:49 +0100
commit64fa0de46ee3cc972af5d3ce8c5dc0db8198cd2b (patch)
treec09153dc5549ce602596cea88255a6938f94a084
parentbbfa7f8558d5346b6884108ad50df3517fe17358 (diff)
downloadqemu-64fa0de46ee3cc972af5d3ce8c5dc0db8198cd2b.zip
qemu-64fa0de46ee3cc972af5d3ce8c5dc0db8198cd2b.tar.gz
qemu-64fa0de46ee3cc972af5d3ce8c5dc0db8198cd2b.tar.bz2
pc-bios/s390-ccw: Abort IPL on invalid loadparm
Because the loadparm specifies an exact kernel the user wants to boot, if the loadparm is invalid it must represent a misconfiguration of the guest. Thus we should abort the IPL immediately, without attempting to use other devices, to avoid booting into an unintended guest image. Signed-off-by: Jared Rossi <jrossi@linux.ibm.com> Message-ID: <20250117212235.1324063-2-jrossi@linux.ibm.com> Signed-off-by: Thomas Huth <thuth@redhat.com>
-rw-r--r--pc-bios/s390-ccw/bootmap.c15
1 files changed, 9 insertions, 6 deletions
diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c
index 56f2f75..0f8baa0 100644
--- a/pc-bios/s390-ccw/bootmap.c
+++ b/pc-bios/s390-ccw/bootmap.c
@@ -336,8 +336,7 @@ static int run_eckd_boot_script(block_number_t bmt_block_nr,
debug_print_int("loadparm", loadparm);
if (loadparm >= MAX_BOOT_ENTRIES) {
- puts("loadparm value greater than max number of boot entries allowed");
- return -EINVAL;
+ panic("loadparm value greater than max number of boot entries allowed");
}
memset(sec, FREE_SPACE_FILLER, sizeof(sec));
@@ -348,8 +347,8 @@ static int run_eckd_boot_script(block_number_t bmt_block_nr,
block_nr = gen_eckd_block_num(&bmt->entry[loadparm].xeckd, ldipl);
if (block_nr == NULL_BLOCK_NR) {
- puts("Cannot find Boot Map Table Entry");
- return -EIO;
+ printf("The requested boot entry (%d) is invalid\n", loadparm);
+ panic("Invalid loadparm");
}
memset(sec, FREE_SPACE_FILLER, sizeof(sec));
@@ -792,8 +791,12 @@ static int ipl_scsi(void)
debug_print_int("loadparm", loadparm);
if (loadparm >= MAX_BOOT_ENTRIES) {
- puts("loadparm value greater than max number of boot entries allowed");
- return -EINVAL;
+ panic("loadparm value greater than max number of boot entries allowed");
+ }
+
+ if (!valid_entries[loadparm]) {
+ printf("The requested boot entry (%d) is invalid\n", loadparm);
+ panic("Invalid loadparm");
}
return zipl_run(&prog_table->entry[loadparm].scsi);