From 4a3957fab5696cc410c5b495956859a424e3552a Mon Sep 17 00:00:00 2001 From: Nikita Dubrovskii Date: Wed, 27 Jan 2021 16:06:08 +0100 Subject: [PATCH] zipl: fix reading 4k disk's geometry MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On 4k SCSI disks zipl stores wrong values to 'scsi_mbr.program_table_pointer', which makes system unbootable. This happens in 'zipl/src/disk.c:656': ``` /* Convert file system block to physical */ *physical = mapped * phy_per_fs + subblock; /* Add partition start */ *physical += info->geo.start; ``` So 'hd_geometry.start' should be adjusted before being used. Fixes: https://bugzilla.redhat.com/show_bug.cgi?id=1918723 Closes: https://github.com/ibm-s390-linux/s390-tools/pull/107 Signed-off-by: Nikita Dubrovskii Reviewed-by: Stefan Haberland Signed-off-by: Jan Höppner --- zipl/src/disk.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/zipl/src/disk.c b/zipl/src/disk.c index eefcbd5ee..c77cdf438 100644 --- a/zipl/src/disk.c +++ b/zipl/src/disk.c @@ -444,6 +444,9 @@ disk_get_info(const char* device, struct job_target_data* target, } /* Convert device size to size in physical blocks */ data->phy_blocks = devsize / (data->phy_block_size / 512); + /* Adjust start on SCSI according to block_size. device-mapper devices are skipped */ + if (data->type == disk_type_scsi && target->targetbase == NULL) + data->geo.start = data->geo.start / (data->phy_block_size / 512); if (data->partnum != 0) data->partition = stats.st_rdev; /* Try to get device name */