From fdd5c6f423983e905a40fb4d9d2212a08bf9b2d0 Mon Sep 17 00:00:00 2001 From: Robbie Harwood Date: Wed, 12 Oct 2022 18:08:53 +0000 Subject: [PATCH] x86-efi: Fix an incorrect array size in kernel allocation Signed-off-by: Robbie Harwood --- ...ncorrect-array-size-in-kernel-alloca.patch | 36 +++++++++++++++++++ grub.patches | 1 + grub2.spec | 5 ++- 3 files changed, 41 insertions(+), 1 deletion(-) create mode 100644 0284-x86-efi-Fix-an-incorrect-array-size-in-kernel-alloca.patch diff --git a/0284-x86-efi-Fix-an-incorrect-array-size-in-kernel-alloca.patch b/0284-x86-efi-Fix-an-incorrect-array-size-in-kernel-alloca.patch new file mode 100644 index 0000000..0079750 --- /dev/null +++ b/0284-x86-efi-Fix-an-incorrect-array-size-in-kernel-alloca.patch @@ -0,0 +1,36 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: Peter Jones +Date: Tue, 11 Oct 2022 17:00:50 -0400 +Subject: [PATCH] x86-efi: Fix an incorrect array size in kernel allocation + +In 81a6ebf62bbe166ddc968463df2e8bd481bf697c ("efi: split allocation +policy for kernel vs initrd memories."), I introduced a split in the +kernel allocator to allow for different dynamic policies for the kernel +and the initrd allocations. + +Unfortunately, that change increased the size of the policy data used to +make decisions, but did not change the size of the temporary storage we +use to back it up and restore. This results in some of .data getting +clobbered at runtime, and hilarity ensues. + +This patch makes the size of the backup storage be based on the size of +the initial policy data. + +Signed-off-by: Peter Jones +--- + grub-core/loader/i386/efi/linux.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/grub-core/loader/i386/efi/linux.c b/grub-core/loader/i386/efi/linux.c +index ac5ef50bdb..9854b0defa 100644 +--- a/grub-core/loader/i386/efi/linux.c ++++ b/grub-core/loader/i386/efi/linux.c +@@ -92,7 +92,7 @@ static struct allocation_choice max_addresses[] = + { INITRD_MEM, GRUB_EFI_MAX_ALLOCATION_ADDRESS, GRUB_EFI_ALLOCATE_MAX_ADDRESS }, + { NO_MEM, 0, 0 } + }; +-static struct allocation_choice saved_addresses[4]; ++static struct allocation_choice saved_addresses[sizeof(max_addresses) / sizeof(max_addresses[0])]; + + #define save_addresses() grub_memcpy(saved_addresses, max_addresses, sizeof(max_addresses)) + #define restore_addresses() grub_memcpy(max_addresses, saved_addresses, sizeof(max_addresses)) diff --git a/grub.patches b/grub.patches index a4af6bf..0ca7cd5 100644 --- a/grub.patches +++ b/grub.patches @@ -281,3 +281,4 @@ Patch0280: 0280-blscfg-Don-t-root-device-in-emu-builds.patch Patch0281: 0281-loader-arm64-linux-Remove-magic-number-header-field-.patch Patch0282: 0282-Correct-BSS-zeroing-on-aarch64.patch Patch0283: 0283-linuxefi-Invalidate-i-cache-before-starting-the-kern.patch +Patch0284: 0284-x86-efi-Fix-an-incorrect-array-size-in-kernel-alloca.patch diff --git a/grub2.spec b/grub2.spec index 63fe40f..9b7fd65 100644 --- a/grub2.spec +++ b/grub2.spec @@ -17,7 +17,7 @@ Name: grub2 Epoch: 1 Version: 2.06 -Release: 59%{?dist} +Release: 60%{?dist} Summary: Bootloader with support for Linux, Multiboot and more License: GPLv3+ URL: http://www.gnu.org/software/grub/ @@ -530,6 +530,9 @@ mv ${EFI_HOME}/grub.cfg.stb ${EFI_HOME}/grub.cfg %endif %changelog +* Wed Oct 12 2022 Robbie Harwood - 2.06-60 +- x86-efi: Fix an incorrect array size in kernel allocation + * Tue Oct 04 2022 Robbie Harwood - 2.06-59 - Flush instruction cache before starting aa64 kernel