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
|
||||
Patch0295: 0295-font-Try-opening-fonts-from-the-bundled-memdisk.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
|
||||
Epoch: 1
|
||||
Version: 2.06
|
||||
Release: 61%{?dist}
|
||||
Release: 62%{?dist}
|
||||
Summary: Bootloader with support for Linux, Multiboot and more
|
||||
License: GPLv3+
|
||||
URL: http://www.gnu.org/software/grub/
|
||||
|
@ -531,6 +531,10 @@ mv ${EFI_HOME}/grub.cfg.stb ${EFI_HOME}/grub.cfg
|
|||
%endif
|
||||
|
||||
%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
|
||||
- Fix missing SBAT bump (sign)
|
||||
|
||||
|
|
Loading…
Reference in a new issue