mirror of
https://src.fedoraproject.org/rpms/grub2.git
synced 2024-11-24 06:22:43 +00:00
Backport arm compressed boot changes
Resolves: #2181825 Signed-off-by: Robbie Harwood <rharwood@redhat.com>
This commit is contained in:
parent
1de51c2578
commit
159a618da5
4 changed files with 147 additions and 1 deletions
|
@ -0,0 +1,44 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Ard Biesheuvel <ardb@kernel.org>
|
||||||
|
Date: Thu, 11 Aug 2022 16:51:57 +0200
|
||||||
|
Subject: [PATCH] loader/arm64/linux: Remove magic number header field check
|
||||||
|
|
||||||
|
The "ARM\x64" magic number in the file header identifies an image as one
|
||||||
|
that implements the bare metal boot protocol, allowing the loader to
|
||||||
|
simply move the file to a suitably aligned address in memory, with
|
||||||
|
sufficient headroom for the trailing .bss segment (the required memory
|
||||||
|
size is described in the header as well).
|
||||||
|
|
||||||
|
Note of this matters for GRUB, as it only supports EFI boot. EFI does
|
||||||
|
not care about this magic number, and nor should GRUB: this prevents us
|
||||||
|
from booting other PE linux images, such as the generic EFI zboot
|
||||||
|
decompressor, which is a pure PE/COFF image, and does not implement the
|
||||||
|
bare metal boot protocol.
|
||||||
|
|
||||||
|
So drop the magic number check.
|
||||||
|
|
||||||
|
Signed-off-by: Ard Biesheuvel <ardb@kernel.org>
|
||||||
|
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
|
||||||
|
Resolves: rhbz#2125069
|
||||||
|
Signed-off-by: Jeremy Linton <jlinton@redhat.com>
|
||||||
|
(cherry-picked from commit 69edb31205602c29293a8c6e67363bba2a4a1e66)
|
||||||
|
Signed-off-by: Robbie Harwood <rharwood@redhat.com>
|
||||||
|
(cherry picked from commit 62382eff5c44a07f8c176108807d446cbfdae609)
|
||||||
|
---
|
||||||
|
grub-core/loader/arm64/linux.c | 3 ---
|
||||||
|
1 file changed, 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
|
||||||
|
index de85583487..489d0c7173 100644
|
||||||
|
--- a/grub-core/loader/arm64/linux.c
|
||||||
|
+++ b/grub-core/loader/arm64/linux.c
|
||||||
|
@@ -55,9 +55,6 @@ static grub_addr_t initrd_end;
|
||||||
|
grub_err_t
|
||||||
|
grub_arch_efi_linux_check_image (struct linux_arch_kernel_header * lh)
|
||||||
|
{
|
||||||
|
- if (lh->magic != GRUB_LINUX_ARMXX_MAGIC_SIGNATURE)
|
||||||
|
- return grub_error(GRUB_ERR_BAD_OS, "invalid magic number");
|
||||||
|
-
|
||||||
|
if ((lh->code0 & 0xffff) != GRUB_DOS_MAGIC)
|
||||||
|
return grub_error (GRUB_ERR_NOT_IMPLEMENTED_YET,
|
||||||
|
N_("plain image kernel not supported - rebuild with CONFIG_(U)EFI_STUB enabled"));
|
96
0298-Correct-BSS-zeroing-on-aarch64.patch
Normal file
96
0298-Correct-BSS-zeroing-on-aarch64.patch
Normal file
|
@ -0,0 +1,96 @@
|
||||||
|
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jeremy Linton <jeremy.linton@arm.com>
|
||||||
|
Date: Tue, 6 Sep 2022 15:33:03 -0500
|
||||||
|
Subject: [PATCH] Correct BSS zeroing on aarch64
|
||||||
|
|
||||||
|
The aarch64 loader doesn't use efi bootservices, and
|
||||||
|
therefor it has a very minimal loader which makes a lot
|
||||||
|
of assumptions about the kernel layout. With the ZBOOT
|
||||||
|
changes, the layout has changed a bit and we not should
|
||||||
|
really be parsing the PE sections to determine how much
|
||||||
|
data to copy, otherwise the BSS won't be setup properly.
|
||||||
|
|
||||||
|
This code still makes a lot of assumptions about the
|
||||||
|
the kernel layout, so its far from ideal, but it works.
|
||||||
|
|
||||||
|
Resolves: rhbz#2125069
|
||||||
|
|
||||||
|
Signed-off-by: Jeremy Linton <jeremy.linton@arm.com>
|
||||||
|
(cherry picked from commit 9752abcb38119b8fa52ba06e651e220c750e26c1)
|
||||||
|
---
|
||||||
|
grub-core/loader/arm64/linux.c | 27 ++++++++++++++++++++++-----
|
||||||
|
1 file changed, 22 insertions(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
|
||||||
|
index 489d0c7173..419f2201df 100644
|
||||||
|
--- a/grub-core/loader/arm64/linux.c
|
||||||
|
+++ b/grub-core/loader/arm64/linux.c
|
||||||
|
@@ -316,10 +316,12 @@ grub_cmd_initrd (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
static grub_err_t
|
||||||
|
parse_pe_header (void *kernel, grub_uint64_t *total_size,
|
||||||
|
grub_uint32_t *entry_offset,
|
||||||
|
- grub_uint32_t *alignment)
|
||||||
|
+ grub_uint32_t *alignment,grub_uint32_t *code_size)
|
||||||
|
{
|
||||||
|
struct linux_arch_kernel_header *lh = kernel;
|
||||||
|
struct grub_armxx_linux_pe_header *pe;
|
||||||
|
+ grub_uint16_t i;
|
||||||
|
+ struct grub_pe32_section_table *sections;
|
||||||
|
|
||||||
|
pe = (void *)((unsigned long)kernel + lh->hdr_offset);
|
||||||
|
|
||||||
|
@@ -329,6 +331,19 @@ parse_pe_header (void *kernel, grub_uint64_t *total_size,
|
||||||
|
*total_size = pe->opt.image_size;
|
||||||
|
*entry_offset = pe->opt.entry_addr;
|
||||||
|
*alignment = pe->opt.section_alignment;
|
||||||
|
+ *code_size = pe->opt.section_alignment;
|
||||||
|
+
|
||||||
|
+ sections = (struct grub_pe32_section_table *) ((char *)&pe->opt +
|
||||||
|
+ pe->coff.optional_header_size);
|
||||||
|
+ grub_dprintf ("linux", "num_sections : %d\n", pe->coff.num_sections );
|
||||||
|
+ for (i = 0 ; i < pe->coff.num_sections; i++)
|
||||||
|
+ {
|
||||||
|
+ grub_dprintf ("linux", "raw_size : %lld\n",
|
||||||
|
+ (long long) sections[i].raw_data_size);
|
||||||
|
+ grub_dprintf ("linux", "virt_size : %lld\n",
|
||||||
|
+ (long long) sections[i].virtual_size);
|
||||||
|
+ *code_size += sections[i].raw_data_size;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return GRUB_ERR_NONE;
|
||||||
|
}
|
||||||
|
@@ -341,6 +356,7 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
grub_err_t err;
|
||||||
|
grub_off_t filelen;
|
||||||
|
grub_uint32_t align;
|
||||||
|
+ grub_uint32_t code_size;
|
||||||
|
void *kernel = NULL;
|
||||||
|
int nx_supported = 1;
|
||||||
|
|
||||||
|
@@ -373,11 +389,12 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
|
||||||
|
if (grub_arch_efi_linux_check_image (kernel) != GRUB_ERR_NONE)
|
||||||
|
goto fail;
|
||||||
|
- if (parse_pe_header (kernel, &kernel_size, &handover_offset, &align) != GRUB_ERR_NONE)
|
||||||
|
+ if (parse_pe_header (kernel, &kernel_size, &handover_offset, &align, &code_size) != GRUB_ERR_NONE)
|
||||||
|
goto fail;
|
||||||
|
grub_dprintf ("linux", "kernel mem size : %lld\n", (long long) kernel_size);
|
||||||
|
grub_dprintf ("linux", "kernel entry offset : %d\n", handover_offset);
|
||||||
|
grub_dprintf ("linux", "kernel alignment : 0x%x\n", align);
|
||||||
|
+ grub_dprintf ("linux", "kernel size : 0x%x\n", code_size);
|
||||||
|
|
||||||
|
err = grub_efi_check_nx_image_support((grub_addr_t)kernel, filelen, &nx_supported);
|
||||||
|
if (err != GRUB_ERR_NONE)
|
||||||
|
@@ -396,9 +413,9 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
|
||||||
|
kernel_addr = (void *)ALIGN_UP((grub_uint64_t)kernel_alloc_addr, align);
|
||||||
|
|
||||||
|
grub_dprintf ("linux", "kernel @ %p\n", kernel_addr);
|
||||||
|
- grub_memcpy (kernel_addr, kernel, grub_min(filelen, kernel_size));
|
||||||
|
- if (kernel_size > filelen)
|
||||||
|
- grub_memset ((char *)kernel_addr + filelen, 0, kernel_size - filelen);
|
||||||
|
+ grub_memcpy (kernel_addr, kernel, grub_min(code_size, kernel_size));
|
||||||
|
+ if (kernel_size > code_size)
|
||||||
|
+ grub_memset ((char *)kernel_addr + code_size, 0, kernel_size - code_size);
|
||||||
|
grub_free(kernel);
|
||||||
|
kernel = NULL;
|
||||||
|
|
|
@ -294,3 +294,5 @@ Patch0293: 0293-font-Assign-null_font-to-glyphs-in-ascii_font_glyph.patch
|
||||||
Patch0294: 0294-normal-charset-Fix-an-integer-overflow-in-grub_unico.patch
|
Patch0294: 0294-normal-charset-Fix-an-integer-overflow-in-grub_unico.patch
|
||||||
Patch0295: 0295-font-Try-opening-fonts-from-the-bundled-memdisk.patch
|
Patch0295: 0295-font-Try-opening-fonts-from-the-bundled-memdisk.patch
|
||||||
Patch0296: 0296-Correction-in-vector-5-values.patch
|
Patch0296: 0296-Correction-in-vector-5-values.patch
|
||||||
|
Patch0297: 0297-loader-arm64-linux-Remove-magic-number-header-field-.patch
|
||||||
|
Patch0298: 0298-Correct-BSS-zeroing-on-aarch64.patch
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
Name: grub2
|
Name: grub2
|
||||||
Epoch: 1
|
Epoch: 1
|
||||||
Version: 2.06
|
Version: 2.06
|
||||||
Release: 61%{?dist}
|
Release: 62%{?dist}
|
||||||
Summary: Bootloader with support for Linux, Multiboot and more
|
Summary: Bootloader with support for Linux, Multiboot and more
|
||||||
License: GPLv3+
|
License: GPLv3+
|
||||||
URL: http://www.gnu.org/software/grub/
|
URL: http://www.gnu.org/software/grub/
|
||||||
|
@ -531,6 +531,10 @@ mv ${EFI_HOME}/grub.cfg.stb ${EFI_HOME}/grub.cfg
|
||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Mon Mar 27 2023 Robbie Harwood <rharwood@redhat.com> - 2.06-62
|
||||||
|
- Backport arm compressed boot changes
|
||||||
|
- Resolves: #2181825
|
||||||
|
|
||||||
* Thu Jan 12 2023 Robbie Harwood <rharwood@redhat.com> - 2.06-61
|
* Thu Jan 12 2023 Robbie Harwood <rharwood@redhat.com> - 2.06-61
|
||||||
- Fix missing SBAT bump (sign)
|
- Fix missing SBAT bump (sign)
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue