diff --git a/0308-Skip-diskfilter-on-powerpc-CDs.patch b/0308-Skip-diskfilter-on-powerpc-CDs.patch deleted file mode 100644 index 6774f8a..0000000 --- a/0308-Skip-diskfilter-on-powerpc-CDs.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Robbie Harwood -Date: Thu, 12 Jan 2023 16:03:03 -0500 -Subject: [PATCH] Skip diskfilter on powerpc CDs - -Prior to this change, on ppc64le with part_msdos and the mdraid* modules -enabled, we see: - - disk/diskfilter.c:191: scanning ieee1275/cdrom - kern/disk.c:196: Opening `ieee1275/cdrom'... - disk/ieee1275/ofdisk.c:477: Opening `cdrom'. - disk/ieee1275/ofdisk.c:502: MAX_RETRIES set to 20 - kern/disk.c:288: Opening `ieee1275/cdrom' succeeded. - disk/diskfilter.c:136: Scanning for DISKFILTER devices on disk ieee1275/cdrom - partmap/msdos.c:184: partition 0: flag 0x80, type 0x96, start 0x0, len - 0x6a5d70 - disk/diskfilter.c:136: Scanning for DISKFILTER devices on disk ieee1275/cdrom - SCSI-DISK: Access beyond end of device ! - SCSI-DISK: Access beyond end of device ! - SCSI-DISK: Access beyond end of device ! - SCSI-DISK: Access beyond end of device ! - SCSI-DISK: Access beyond end of device ! - disk/ieee1275/ofdisk.c:578: MAX_RETRIES set to 20 - -These latter two lines repeat many times, eventually ending in: - - kern/disk.c:388: ieee1275/cdrom read failed - error: ../../grub-core/disk/ieee1275/ofdisk.c:608:failure reading sector - 0x1a9720 from `ieee1275/cdrom'. - -and the system drops to a "grub>" prompt. - -The firmware and the iso image appear to diagree on the blocksize (512 -vs. 2048), and the diskfilter RAID probing is too much for it. We won't -be seeing RAID on bootable CDs, so just turn it off. - -Signed-off-by: Robbie Harwood -(cherry picked from commit 35614da6ef0296d1a2d1583ae23822230c25a334) -(cherry picked from commit e908b38eabd5011865b3bfe0873b053ee82de217) ---- - grub-core/disk/diskfilter.c | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c -index 7cdffe3ebd..f9140f7493 100644 ---- a/grub-core/disk/diskfilter.c -+++ b/grub-core/disk/diskfilter.c -@@ -133,6 +133,11 @@ scan_disk_partition_iter (grub_disk_t disk, grub_partition_t p, void *data) - struct grub_diskfilter_pv_id id; - grub_diskfilter_t diskfilter; - -+#ifdef __powerpc__ -+ if (!grub_strcmp (name, "ieee1275/cdrom")) -+ return 0; -+#endif -+ - grub_dprintf ("diskfilter", "Scanning for DISKFILTER devices on disk %s\n", - name); - #ifdef GRUB_UTIL diff --git a/0308-ppc64le-signed-boot-media-changes.patch b/0308-ppc64le-signed-boot-media-changes.patch new file mode 100644 index 0000000..c1fbd94 --- /dev/null +++ b/0308-ppc64le-signed-boot-media-changes.patch @@ -0,0 +1,103 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Robbie Harwood +Date: Wed, 25 Jan 2023 16:10:58 -0500 +Subject: [PATCH] ppc64le: signed boot media changes + +Skip diskfilter on isos since mdraid* can't even + +Prior to this change, on ppc64le with part_msdos and the mdraid* modules +enabled, we see: + + disk/diskfilter.c:191: scanning ieee1275/cdrom + kern/disk.c:196: Opening `ieee1275/cdrom'... + disk/ieee1275/ofdisk.c:477: Opening `cdrom'. + disk/ieee1275/ofdisk.c:502: MAX_RETRIES set to 20 + kern/disk.c:288: Opening `ieee1275/cdrom' succeeded. + disk/diskfilter.c:136: Scanning for DISKFILTER devices on disk ieee1275/cdrom + partmap/msdos.c:184: partition 0: flag 0x80, type 0x96, start 0x0, len + 0x6a5d70 + disk/diskfilter.c:136: Scanning for DISKFILTER devices on disk ieee1275/cdrom + SCSI-DISK: Access beyond end of device ! + SCSI-DISK: Access beyond end of device ! + SCSI-DISK: Access beyond end of device ! + SCSI-DISK: Access beyond end of device ! + SCSI-DISK: Access beyond end of device ! + disk/ieee1275/ofdisk.c:578: MAX_RETRIES set to 20 + +These latter two lines repeat many times, eventually ending in: + + kern/disk.c:388: ieee1275/cdrom read failed + error: ../../grub-core/disk/ieee1275/ofdisk.c:608:failure reading sector + 0x1a9720 from `ieee1275/cdrom'. + +and the system drops to a "grub>" prompt. + +The firmware and the iso image appear to diagree on the blocksize (512 +vs. 2048), and the diskfilter RAID probing is too much for it. We won't +be seeing RAID on bootable CDs, so just turn it off. + +Fix detection of root. + +Try the chrp path as a fallback if the built prefix doesn't work. + +Signed-off-by: Robbie Harwood +(cherry picked from commit 178d2c473ba6408529d522cd27626e832834590a) +--- + grub-core/disk/diskfilter.c | 6 ++++++ + grub-core/kern/ieee1275/openfw.c | 2 +- + grub-core/normal/main.c | 5 +++++ + 3 files changed, 12 insertions(+), 1 deletion(-) + +diff --git a/grub-core/disk/diskfilter.c b/grub-core/disk/diskfilter.c +index 7cdffe3ebd..27fbca903f 100644 +--- a/grub-core/disk/diskfilter.c ++++ b/grub-core/disk/diskfilter.c +@@ -139,6 +139,12 @@ scan_disk_partition_iter (grub_disk_t disk, grub_partition_t p, void *data) + grub_util_info ("Scanning for DISKFILTER devices on disk %s", name); + #endif + ++ if (p->parent == NULL || p->parent->len == 0) ++ { ++ grub_dprintf ("diskfilter", "skipping %s due to unknown parent partition length", name); ++ return 0; ++ } ++ + disk->partition = p; + + for (arr = array_list; arr != NULL; arr = arr->next) +diff --git a/grub-core/kern/ieee1275/openfw.c b/grub-core/kern/ieee1275/openfw.c +index 3a6689abb1..0278054c61 100644 +--- a/grub-core/kern/ieee1275/openfw.c ++++ b/grub-core/kern/ieee1275/openfw.c +@@ -499,7 +499,7 @@ grub_ieee1275_encode_devname (const char *path) + *optr++ ='\\'; + *optr++ = *iptr++; + } +- if (partition && partition[0]) ++ if (partition && partition[0] >= '0' && partition[0] <= '9') + { + unsigned int partno = grub_strtoul (partition, 0, 0); + +diff --git a/grub-core/normal/main.c b/grub-core/normal/main.c +index f9ccca502e..c864f80093 100644 +--- a/grub-core/normal/main.c ++++ b/grub-core/normal/main.c +@@ -374,6 +374,7 @@ grub_try_normal_prefix (const char *prefix) + file = grub_file_open (config, GRUB_FILE_TYPE_CONFIG); + if (file) + { ++ grub_env_set ("prefix", prefix); + grub_file_close (file); + err = GRUB_ERR_NONE; + } +@@ -449,6 +450,10 @@ grub_cmd_normal (struct grub_command *cmd __attribute__ ((unused)), + err = grub_try_normal ("fw_path"); + if (err == GRUB_ERR_FILE_NOT_FOUND) + err = grub_try_normal ("prefix"); ++#ifdef __powerpc__ ++ if (err == GRUB_ERR_FILE_NOT_FOUND) ++ err = grub_try_normal_prefix ("/boot/grub"); ++#endif + if (err == GRUB_ERR_FILE_NOT_FOUND) + err = grub_try_normal_discover (); + if (err == GRUB_ERR_FILE_NOT_FOUND) diff --git a/0309-Fix-prefix-and-root-on-ppc64le-CDs.patch b/0309-Fix-prefix-and-root-on-ppc64le-CDs.patch deleted file mode 100644 index bef72c1..0000000 --- a/0309-Fix-prefix-and-root-on-ppc64le-CDs.patch +++ /dev/null @@ -1,54 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Robbie Harwood -Date: Fri, 13 Jan 2023 12:36:29 -0500 -Subject: [PATCH] Fix prefix and root on ppc64le CDs - -CHRP requires grub at /boot/grub. On CDs, this means any other prefix -will be invalid. In particular, a distro grub might prefer /grub2 - but -prefix is hardcoded into the signed core.elf, and will always be wrong -here. - -Also work around a conflict between OF naming and that used by -part_msdos: on CDs, we always want the raw device. This fixes an issue -where grub would successfully load the menu from an image, but then -produce the error: - - error: ../../grub-core/net/net.c:1552:disk `ieee1275/cdrom,0' not found. - -and fail to boot further. - -Signed-off-by: Robbie Harwood -(cherry picked from commit 68e5981a5e808a32350aca4a2414717fa4605ca0) -(cherry picked from commit 19c45257cc29845adedc3931eed577e97534f8f1) ---- - grub-core/kern/main.c | 17 +++++++++++++++++ - 1 file changed, 17 insertions(+) - -diff --git a/grub-core/kern/main.c b/grub-core/kern/main.c -index 4c4e6912f9..6989da5618 100644 ---- a/grub-core/kern/main.c -+++ b/grub-core/kern/main.c -@@ -278,6 +278,23 @@ grub_set_prefix_and_root (void) - } - - grub_env_set ("root", device); -+ -+#ifdef __powerpc__ -+ /* When booting from a CD, if part_msdos is enabled, grub will detect -+ and create access points starting at (ieee1275/cdrom,msdos1). -+ However, the device detection and OF name transformation will produce -+ a device named (ieee1275/cdrom,0) - i.e., missing the msdos and also -+ differently indexed. Furthermore, CHRP mandates boot/grub as prefix, -+ but our signed images are built with /grub2 to reflect installed -+ systems. Just ignore both messes. -+ */ -+ if (!grub_strncmp (device[0] == '(' ? device + 1 : device, -+ "ieee1275/cdrom", grub_strlen ("ieee1275/cdrom"))) -+ { -+ grub_env_set ("prefix", "/boot/grub"); -+ grub_env_set ("root", "ieee1275/cdrom"); -+ } -+#endif - } - - grub_free (device); diff --git a/grub.patches b/grub.patches index ec2307e..23ccf3c 100644 --- a/grub.patches +++ b/grub.patches @@ -305,5 +305,4 @@ Patch0304: 0304-font-Harden-grub_font_blit_glyph-and-grub_font_blit_.patch Patch0305: 0305-font-Assign-null_font-to-glyphs-in-ascii_font_glyph.patch Patch0306: 0306-normal-charset-Fix-an-integer-overflow-in-grub_unico.patch Patch0307: 0307-Correction-in-vector-5-values.patch -Patch0308: 0308-Skip-diskfilter-on-powerpc-CDs.patch -Patch0309: 0309-Fix-prefix-and-root-on-ppc64le-CDs.patch +Patch0308: 0308-ppc64le-signed-boot-media-changes.patch diff --git a/grub2.spec b/grub2.spec index c236de5..5816672 100644 --- a/grub2.spec +++ b/grub2.spec @@ -14,7 +14,7 @@ Name: grub2 Epoch: 1 Version: 2.06 -Release: 53%{?dist} +Release: 54%{?dist} Summary: Bootloader with support for Linux, Multiboot and more License: GPLv3+ URL: http://www.gnu.org/software/grub/ @@ -532,6 +532,10 @@ mv ${EFI_HOME}/grub.cfg.stb ${EFI_HOME}/grub.cfg %endif %changelog +* Fri Jan 27 2023 Robbie Harwood - 2.06-54 +- ppc64le: update signed media fixes +- Resolves: #2143420 + * Fri Jan 13 2023 Robbie Harwood - 2.06-53 - ppc64le: fix issues using core.elf on boot media - Resolves: #2143420