diff --git a/detach_disks.sh b/detach_disks.sh index fdac12d..c514208 100644 --- a/detach_disks.sh +++ b/detach_disks.sh @@ -1,11 +1,10 @@ #!/bin/sh -COOKIE=$(mcookie) -DASDFILE=/tmp/dasd.list.${COOKIE} -DETFILE=/tmp/detach.disks.${COOKIE} -KEEPFILE=/tmp/keep.disks.${COOKIE} -NICFILE=/tmp/nic.list.${COOKIE} -FAILFILE=/tmp/error.${COOKIE} +DASDFILE=/tmp/dasd.list.$(mcookie) +DETFILE=/tmp/detach.disks.$(mcookie) +KEEPFILE=/tmp/keep.disks.$(mcookie) +NICFILE=/tmp/nic.list.$(mcookie) +FAILFILE=/tmp/error.$(mcookie) function expand_RANGE(){ local RANGE=${1} 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-Format-devices-in-parallel.patch b/s390-tools-sles15sp3-Format-devices-in-parallel.patch index da0eb26..bd7dbc5 100644 --- a/s390-tools-sles15sp3-Format-devices-in-parallel.patch +++ b/s390-tools-sles15sp3-Format-devices-in-parallel.patch @@ -101,6 +101,15 @@ index e7fc501..07c674b 100644 for (i = barlength + 1; i <= 33; i++) printf("-"); printf("|%3d%%", p_new); +@@ -311,7 +318,7 @@ + } + + if (g.print_hashmarks && (cyl / g.hashstep - hashcount) != 0) { +- printf("#"); ++ printf("%d|", g.procnum); + fflush(stdout); + hashcount++; + } @@ -1560,7 +1568,11 @@ char *reqsize_param_str = NULL; char *hashstep_str = NULL; diff --git a/s390-tools-sles15sp3-Implement-Y-yast_mode.patch b/s390-tools-sles15sp3-Implement-Y-yast_mode.patch index e13bd6b..da44b76 100644 --- a/s390-tools-sles15sp3-Implement-Y-yast_mode.patch +++ b/s390-tools-sles15sp3-Implement-Y-yast_mode.patch @@ -104,6 +104,15 @@ index 6dd28fa..5b6023a 100644 printf("ok\n"); } } +@@ -1548,6 +1556,8 @@ + error("%s", str); + + set_geo(&cylinders, &heads); ++ if (g.yast_mode) ++ printf("%d\n", cylinders); + set_label(&vlabel, &format_params, cylinders); + + if (g.check) @@ -1693,6 +1701,10 @@ int main(int argc, char *argv[]) case OPT_NODISCARD: g.no_discard = 1; diff --git a/s390-tools-sles15sp3-check-return-code-from-util_file_read_l.patch b/s390-tools-sles15sp3-check-return-code-from-util_file_read_l.patch new file mode 100644 index 0000000..9e00edd --- /dev/null +++ b/s390-tools-sles15sp3-check-return-code-from-util_file_read_l.patch @@ -0,0 +1,12 @@ +--- a/libdasd/dasd_sys.c 2020-10-28 10:31:59.000000000 -0400 ++++ b/libdasd/dasd_sys.c 2021-02-27 17:41:04.937023501 -0500 +@@ -218,7 +218,8 @@ + return 0; + + path = util_path_sysfs("bus/ccw/devices/%s/host_access_count", busid); +- util_file_read_l(&value, 10, path); ++ if (util_file_read_l(&value, 10, path) == -1) ++ value=0; + free(path); + + return value; 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 a2291ef..0a72951 100644 --- a/s390-tools.changes +++ b/s390-tools.changes @@ -1,3 +1,34 @@ +------------------------------------------------------------------- +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 + +- Updated detach_disks.sh to not use predictable temporary file + names. (bsc#1182777, CVE-2021-25316) +- Made for the following changes for bsc#1182816: + * Updated s390-tools-sles15sp3-Format-devices-in-parallel.patch to + change all instances of the progress bar from printing "#" to + printing the process number of the DASD volume being formatted. + * Updated s390-tools-sles15sp3-Implement-Y-yast_mode.patch to print + out the numbder of cylinders in a device, as was done in the + prior versions of this patch, but was missed when modifying it + for SLES15 SP3. + * Added s390-tools-sles15sp3-check-return-code-from-util_file_read_l.patch + because otherwise a warning message from dasdfmt is being generated + that could interfere with YaST properly processing the progress + of the formatting process. + ------------------------------------------------------------------- Wed Feb 17 20:47:26 UTC 2021 - Mark Post diff --git a/s390-tools.spec b/s390-tools.spec index d01c8d4..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 @@ -112,6 +113,8 @@ Patch908: s390-tools-sles15sp3-dasdfmt-retry-BIODASDINFO-if-device-is-busy 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