diff options
| -rw-r--r-- | 0006-Avoid-broken-uefi-fs.patch | 55 | ||||
| -rw-r--r-- | grub.spec | 10 |
2 files changed, 63 insertions, 2 deletions
diff --git a/0006-Avoid-broken-uefi-fs.patch b/0006-Avoid-broken-uefi-fs.patch new file mode 100644 index 0000000..4bbb25b --- /dev/null +++ b/0006-Avoid-broken-uefi-fs.patch @@ -0,0 +1,55 @@ +From 1ccd18babed6463dc2f57ed60542deacf8d5fcaf Mon Sep 17 00:00:00 2001 +From: Matthew Garrett <mjg@redhat.com> +Date: Wed, 25 Apr 2012 16:40:11 -0400 +Subject: [PATCH] Deal with buggy firmware filesystem implementations + +Some Apple firmwares don't increment buffersize when returning +EFI_BUFFER_TOO_SMALL. Hack around that. +--- + stage2/fsys_uefi.c | 10 +++++++++- + 1 file changed, 9 insertions(+), 1 deletion(-) + +diff --git a/stage2/fsys_uefi.c b/stage2/fsys_uefi.c +index 58b7050..344fefc 100644 +--- a/stage2/fsys_uefi.c ++++ b/stage2/fsys_uefi.c +@@ -75,7 +75,7 @@ uefi_dir (char *dirname) + grub_efi_char16_t *file_name_w = NULL; + grub_efi_char16_t *dir_name_w = NULL; + grub_efi_file_info_t *fileinfo = NULL; +- grub_efi_uintn_t buffersize = 0; ++ grub_efi_uintn_t buffersize = 0, prev_buffersize; + grub_efi_file_t *directory = NULL; + int i, dirlen = 0, ret = 0; + +@@ -106,9 +106,13 @@ uefi_dir (char *dirname) + while (1) { + int filenamelen; + ++ prev_buffersize = buffersize; ++ + status = Call_Service_3 (file->read, file, &buffersize, fileinfo); + + if (status == GRUB_EFI_BUFFER_TOO_SMALL) { ++ if (buffersize == prev_buffersize) ++ buffersize += 1024; + fileinfo = grub_malloc(buffersize); + continue; + } else if (status) { +@@ -146,9 +150,13 @@ uefi_dir (char *dirname) + int filenamelen; + int invalid = 0; + ++ prev_buffersize = buffersize; ++ + status = Call_Service_3 (directory->read, directory, &buffersize, fileinfo); + + if (status == GRUB_EFI_BUFFER_TOO_SMALL) { ++ if (buffersize == prev_buffersize) ++ buffersize += 1024; + fileinfo = grub_malloc(buffersize); + continue; + } else if (status) { +-- +1.7.10 + @@ -1,12 +1,12 @@ Name: grub Version: 0.97 -Release: 92%{?dist} +Release: 93%{?dist} Epoch: 1 Summary: Grand Unified Boot Loader. Group: System Environment/Base License: GPLv2+ -ExclusiveArch: i686 x86_64 ia64 +ExclusiveArch: x86_64 i686 BuildRequires: binutils >= 2.9.1.0.23, ncurses-devel, ncurses-static, texinfo BuildRequires: autoconf /usr/lib/crt1.o automake BuildRequires: gnu-efi >= 3.0e-9 @@ -28,6 +28,8 @@ Patch0: grub-fedora-17.patch Patch1: 0001-Fix-strange-compilation-problem.patch Patch2: 0003-Move_network-disable-earlier.patch Patch3: 0004-Make-sure-align-is-initialised.patch +Patch4: 0005-Fix-Apple-CD-fixup.patch +Patch5: 0006-Avoid-broken-uefi-fs.patch %description GRUB (Grand Unified Boot Loader) is an experimental boot loader @@ -122,6 +124,10 @@ fi /sbin/grub-crypt %changelog +* Wed Apr 25 2012 Matthew Garrett <mjg@redhat.com> - 0.97-93 +- Fix CD booting on Apples +- Work around Apple firmware bug that hangs in uefi filesystem reads + * Thu Apr 19 2012 Matthew Garrett <mjg@redhat.com> - 0.97-92 - Build with -Os |
