diff --git a/mkdump.pl b/mkdump.pl index 2a43523..d1483d3 100644 --- a/mkdump.pl +++ b/mkdump.pl @@ -43,7 +43,7 @@ my $UDEVADM = "/sbin/udevadm"; my $ZGETDUMP = "/sbin/zgetdump"; # temporary DASD device configuration file for Zipl -my $MDPATH = "/tmp/mvdump.conf"; +my $MDPATH = "/tmp/mvdump.conf.".`mcookie`; # zFCP dump dir, without a leading '/' my $ZFCP_DUMP_DIR = "mydumps"; @@ -386,11 +386,9 @@ sub setup_dasddump prepare_dasd(@devices); # create zipl device configuration file - my $md_path = "/tmp/mvdump.conf"; - # don't create files in debug mode unless ($OPT_DEBUG) { - open(my $file, ">", $md_path) or exit_with("Unable to access $md_path: $!.", 15); + open(my $file, ">", $MDPATH) or exit_with("Unable to access $MDPATH: $!.", 15); for my $device (@devices) { print{$file}("${device}1\n"); } @@ -398,7 +396,7 @@ sub setup_dasddump } print("Creating dump record.\n"); - run_cmd("${ZIPL} -V -n -M $md_path"); + run_cmd("${ZIPL} -V -n -M $MDPATH"); cleanup(); } diff --git a/s390-tools-sles15sp3-remove-no-pie-link-arguments.patch b/s390-tools-sles15sp3-remove-no-pie-link-arguments.patch new file mode 100644 index 0000000..5eaf4b8 --- /dev/null +++ b/s390-tools-sles15sp3-remove-no-pie-link-arguments.patch @@ -0,0 +1,13 @@ +--- s390-tools-2.15.1/common.mak 2020-10-28 10:31:59.000000000 -0400 ++++ s390-tools-2.15.1/common.mak 2021-03-01 11:16:20.285597140 -0500 +@@ -224,8 +224,8 @@ + + ifneq ($(shell $(CC_SILENT) -dumpspecs 2>/dev/null | grep -e '[^f]no-pie'),) + NO_PIE_CFLAGS := -fno-pie +- NO_PIE_LINKFLAGS := -no-pie +- NO_PIE_LDFLAGS := -no-pie ++ NO_PIE_LINKFLAGS := ++ NO_PIE_LDFLAGS := + else + NO_PIE_CFLAGS := + NO_PIE_LINKFLAGS := diff --git a/s390-tools-sles15sp3-zipl-fix-4k-scsi-ipl.patch b/s390-tools-sles15sp3-zipl-fix-4k-scsi-ipl.patch new file mode 100644 index 0000000..4e09f35 --- /dev/null +++ b/s390-tools-sles15sp3-zipl-fix-4k-scsi-ipl.patch @@ -0,0 +1,64 @@ +Subject: [PATCH] [BZ 191696] zipl: fix reading 4k disk's geometry +From: Stefan Haberland + +Description: zipl: fix IPL on 4K SCSI disks +Symptom: IPL is not working when bootloader is installed + on a SCSI disk with 4k physical blocksize without using + a devicemapper target. +Problem: The getgeo ioctl that is used reports the partition + start in multiple of 512 byte sectors but the blocksize + that is used is the physical blocksize of 4k and + therefore the calculated partition start does not + match. For device mapper targets the zipl-helper script + is used that adjusts the partition start correctly to + the physical blocksize. +Solution: Adjust the partition start depending on the physical + blocksize. +Reproduction: Use zipl to install a bootloader on a SCSI disk with 4k + physical blocksize and without usage of a device mapper + target. +Upstream-ID: 4a3957fab5696cc410c5b495956859a424e3552a +Problem-ID: 191696 + +Upstream-Description: + + zipl: fix reading 4k disk's geometry + + 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 Hoeppner + + +Signed-off-by: Stefan Haberland +--- + zipl/src/disk.c | 3 +++ + 1 file changed, 3 insertions(+) + +--- a/zipl/src/disk.c ++++ b/zipl/src/disk.c +@@ -444,6 +444,9 @@ type_determined: + } + /* 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 */ diff --git a/s390-tools.changes b/s390-tools.changes index 0c186b9..0a72951 100644 --- a/s390-tools.changes +++ b/s390-tools.changes @@ -1,3 +1,16 @@ +------------------------------------------------------------------- +Mon Mar 8 20:52:57 UTC 2021 - Mark Post + +- Added s390-tools-sles15sp3-zipl-fix-4k-scsi-ipl.patch (bsc#1183039) + IPL is not working when bootloader is installed on a SCSI disk + with 4k physical blocksize without using a devicemapper target. +- Added s390-tools-sles15sp3-remove-no-pie-link-arguments.patch so + that we can build on systems with binutils 2.36 and higher. Without + this, the build fails because that version of the ld command + doesn't recognize "-no-pie" an acceptable argument. +- Updated the mkdump.pl script to make the name of the temporary + configuration file in /tmp/ unpredictable. (bsc#1182876) + ------------------------------------------------------------------- Sat Feb 27 23:07:46 UTC 2021 - Mark Post diff --git a/s390-tools.spec b/s390-tools.spec index fb11155..d1dd7a7 100644 --- a/s390-tools.spec +++ b/s390-tools.spec @@ -98,6 +98,7 @@ Patch8: s390-tools-sles15sp3-02-genprotimg-fix-two-memory-leaks.patch Patch9: s390-tools-sles15sp3-03-genprotimg-require-argument-for-ramdisk-and-parmfile.patch Patch10: s390-tools-sles15sp3-04-genprotimg-add-host-key-document-verification-suppor.patch Patch11: s390-tools-sles15sp3-zkey-Fix-APQN-property-names.patch +Patch12: s390-tools-sles15sp3-zipl-fix-4k-scsi-ipl.patch # SUSE patches Patch900: s390-tools-sles12-zipl_boot_msg.patch @@ -113,6 +114,7 @@ Patch909: 59-dasd.rules-wait_for.patch Patch910: s390-tools-sles12-fdasd-skip-partition-check-and-BLKRRPART-ioctl.patch Patch911: s390-tools-sles15sp1-11-zdev-Do-not-call-zipl-on-initrd-update.patch Patch912: s390-tools-sles15sp3-check-return-code-from-util_file_read_l.patch +Patch913: s390-tools-sles15sp3-remove-no-pie-link-arguments.patch BuildRequires: curl-devel BuildRequires: dracut