fbb94cc706
- kvm-virtio-iommu-Add-bypass-mode-support-to-assigned-dev.patch [bz#2100106] - kvm-virtio-iommu-Use-recursive-lock-to-avoid-deadlock.patch [bz#2100106] - kvm-virtio-iommu-Add-an-assert-check-in-translate-routin.patch [bz#2100106] - kvm-virtio-iommu-Fix-the-partial-copy-of-probe-request.patch [bz#2100106] - kvm-virtio-iommu-Fix-migration-regression.patch [bz#2100106] - kvm-pc-bios-s390-ccw-virtio-Introduce-a-macro-for-the-DA.patch [bz#2098077] - kvm-pc-bios-s390-ccw-bootmap-Improve-the-guessing-logic-.patch [bz#2098077] - kvm-pc-bios-s390-ccw-virtio-blkdev-Simplify-fix-virtio_i.patch [bz#2098077] - kvm-pc-bios-s390-ccw-virtio-blkdev-Remove-virtio_assume_.patch [bz#2098077] - kvm-pc-bios-s390-ccw-virtio-Set-missing-status-bits-whil.patch [bz#2098077] - kvm-pc-bios-s390-ccw-virtio-Read-device-config-after-fea.patch [bz#2098077] - kvm-pc-bios-s390-ccw-virtio-Beautify-the-code-for-readin.patch [bz#2098077] - kvm-pc-bios-s390-ccw-Split-virtio-scsi-code-from-virtio_.patch [bz#2098077] - kvm-pc-bios-s390-ccw-virtio-blkdev-Request-the-right-fea.patch [bz#2098077] - kvm-pc-bios-s390-ccw-netboot.mak-Ignore-Clang-s-warnings.patch [bz#2098077] - kvm-hw-block-fdc-Prevent-end-of-track-overrun-CVE-2021-3.patch [bz#1951522] - kvm-tests-qtest-fdc-test-Add-a-regression-test-for-CVE-2.patch [bz#1951522] - Resolves: bz#2100106 (Fix virtio-iommu/vfio bypass) - Resolves: bz#2098077 (virtio-blk: Can't boot fresh installation from used virtio-blk dasd disk under certain conditions) - Resolves: bz#1951522 (CVE-2021-3507 qemu-kvm: QEMU: fdc: heap buffer overflow in DMA read data transfers [rhel-9.0])
103 lines
3.8 KiB
Diff
103 lines
3.8 KiB
Diff
From 64fa56e0520215e3909e442f09d8073c1870648a Mon Sep 17 00:00:00 2001
|
|
From: Thomas Huth <thuth@redhat.com>
|
|
Date: Fri, 8 Jul 2022 20:49:01 +0200
|
|
Subject: [PATCH 07/17] pc-bios/s390-ccw/bootmap: Improve the guessing logic in
|
|
zipl_load_vblk()
|
|
|
|
RH-Author: Thomas Huth <thuth@redhat.com>
|
|
RH-MergeRequest: 106: pc-bios/s390-ccw: Fix boot from disks with 4k sectors that do not have the typical DASD geometry
|
|
RH-Commit: [2/10] ca8f5e847617cf4ac2fd6c38edb2982f32fa3eba (thuth/qemu-kvm-cs9)
|
|
RH-Bugzilla: 2098077
|
|
RH-Acked-by: Miroslav Rezanina <mrezanin@redhat.com>
|
|
RH-Acked-by: David Hildenbrand <david@redhat.com>
|
|
RH-Acked-by: Cornelia Huck <cohuck@redhat.com>
|
|
|
|
Bugzilla: http://bugzilla.redhat.com/2098077
|
|
|
|
commit 422865f6672ee1482b98d18321b55c1ecfb06c82
|
|
Author: Thomas Huth <thuth@redhat.com>
|
|
Date: Mon Jul 4 13:18:54 2022 +0200
|
|
|
|
pc-bios/s390-ccw/bootmap: Improve the guessing logic in zipl_load_vblk()
|
|
|
|
The logic of trying an final ISO or ECKD boot on virtio-block devices is
|
|
very weird: Since the geometry hardly ever matches in virtio_disk_is_scsi(),
|
|
virtio_blk_setup_device() always sets a "guessed" disk geometry via
|
|
virtio_assume_scsi() (which is certainly also wrong in a lot of cases).
|
|
|
|
zipl_load_vblk() then sees that there's been a "virtio_guessed_disk_nature"
|
|
and tries to fix up the geometry again via virtio_assume_iso9660() before
|
|
always trying to do ipl_iso_el_torito(). That's a very brain-twisting
|
|
way of attempting to boot from ISO images, which won't work anymore after
|
|
the following patches that will clean up the virtio_assume_scsi() mess
|
|
(and thus get rid of the "virtio_guessed_disk_nature" here).
|
|
|
|
Let's try a better approach instead: ISO files always have a magic
|
|
string "CD001" at offset 0x8001 (see e.g. the ECMA-119 specification)
|
|
which we can use to decide whether we should try to boot in ISO 9660
|
|
mode (which we should also try if we see a sector size of 2048).
|
|
|
|
And if we were not able to boot in ISO mode here, the final boot attempt
|
|
before panicking is to boot in ECKD mode. Since this is our last boot
|
|
attempt anyway, simply always assume the ECKD geometry here (if the sector
|
|
size was not 4096 yet), so that we also do not depend on the guessed disk
|
|
geometry from virtio_blk_setup_device() here anymore.
|
|
|
|
Message-Id: <20220704111903.62400-4-thuth@redhat.com>
|
|
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
|
|
|
Signed-off-by: Thomas Huth <thuth@redhat.com>
|
|
---
|
|
pc-bios/s390-ccw/bootmap.c | 27 +++++++++++++++++++++++----
|
|
1 file changed, 23 insertions(+), 4 deletions(-)
|
|
|
|
diff --git a/pc-bios/s390-ccw/bootmap.c b/pc-bios/s390-ccw/bootmap.c
|
|
index 56411ab3b6..994e59c0b0 100644
|
|
--- a/pc-bios/s390-ccw/bootmap.c
|
|
+++ b/pc-bios/s390-ccw/bootmap.c
|
|
@@ -780,18 +780,37 @@ static void ipl_iso_el_torito(void)
|
|
}
|
|
}
|
|
|
|
+/**
|
|
+ * Detect whether we're trying to boot from an .ISO image.
|
|
+ * These always have a signature string "CD001" at offset 0x8001.
|
|
+ */
|
|
+static bool has_iso_signature(void)
|
|
+{
|
|
+ int blksize = virtio_get_block_size();
|
|
+
|
|
+ if (!blksize || virtio_read(0x8000 / blksize, sec)) {
|
|
+ return false;
|
|
+ }
|
|
+
|
|
+ return !memcmp("CD001", &sec[1], 5);
|
|
+}
|
|
+
|
|
/***********************************************************************
|
|
* Bus specific IPL sequences
|
|
*/
|
|
|
|
static void zipl_load_vblk(void)
|
|
{
|
|
- if (virtio_guessed_disk_nature()) {
|
|
- virtio_assume_iso9660();
|
|
+ int blksize = virtio_get_block_size();
|
|
+
|
|
+ if (blksize == VIRTIO_ISO_BLOCK_SIZE || has_iso_signature()) {
|
|
+ if (blksize != VIRTIO_ISO_BLOCK_SIZE) {
|
|
+ virtio_assume_iso9660();
|
|
+ }
|
|
+ ipl_iso_el_torito();
|
|
}
|
|
- ipl_iso_el_torito();
|
|
|
|
- if (virtio_guessed_disk_nature()) {
|
|
+ if (blksize != VIRTIO_DASD_DEFAULT_BLOCK_SIZE) {
|
|
sclp_print("Using guessed DASD geometry.\n");
|
|
virtio_assume_eckd();
|
|
}
|
|
--
|
|
2.31.1
|
|
|