Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.5:Update
grub2.22047
0005-Make-linux_arm_kernel_header.hdr_offset-be...
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File 0005-Make-linux_arm_kernel_header.hdr_offset-be-at-the-ri.patch of Package grub2.22047
From 669aa440ca34f6d8982c92b79fa2ee84c20618c6 Mon Sep 17 00:00:00 2001 From: Peter Jones <pjones@redhat.com> Date: Thu, 16 Aug 2018 11:08:11 -0400 Subject: [PATCH 5/9] Make linux_arm_kernel_header.hdr_offset be at the right place The kernel in front of me (slightly edited to make objdump work) looks like: 00000000 4d 5a 10 13 4d 5a 10 13 4d 5a 10 13 4d 5a 10 13 |MZ..MZ..MZ..MZ..| 00000010 4d 5a 10 13 4d 5a 10 13 4d 5a 10 13 00 00 a0 e1 |MZ..MZ..MZ......| 00000020 f6 03 00 ea 18 28 6f 01 00 00 00 00 00 32 74 00 |.....(o......2t.| 00000030 01 02 03 04 45 45 45 45 74 a2 00 00 40 00 00 00 |....EEEEt...@...| 00000040 50 45 00 00 4c 01 04 00 00 00 00 00 00 00 00 00 |PE..L...........| 00000050 00 00 00 00 90 00 06 03 0b 01 02 14 00 20 74 00 |............. t.| 00000060 00 14 00 00 00 00 00 00 b4 19 00 00 00 10 00 00 |................| 00000070 00 30 74 00 00 00 00 00 00 10 00 00 00 02 00 00 |.0t.............| 00000080 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 00000090 00 44 74 00 00 10 00 00 00 00 00 00 0a 00 00 00 |.Dt.............| 000000a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| 000000b0 00 00 00 00 06 00 00 00 00 00 00 00 00 00 00 00 |................| 000000c0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................| * (I don't know why the MZ header is there 7 times, but the offsets work out, so it's merely a surprising distraction.) If linux_arm_kernel_header.reserved2 is 16 bytes, that means hdr_offset is here: 00000030 01 02 03 04 45 45 45 45 74 a2 00 00 40 00 00 00 |....EEEEt...@...| 00000040 50 45 00 00 4c 01 04 00 00 00 00 00 00 00 00 00 |PE..L...........| ^^^^^^^^^^^ But it's supposed to be 4 bytes before that. This patch makes the reserved field be 3*32 instead of 4*32, and that means we can find the PE header correcrtly at 0x40 by reading the value at 0x3c. Signed-off-by: Peter Jones <pjones@redhat.com> --- grub-core/loader/arm64/efi/linux.c | 3 +++ include/grub/arm/linux.h | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/grub-core/loader/arm64/efi/linux.c b/grub-core/loader/arm64/efi/linux.c index 4d084950a..83d09b7e5 100644 --- a/grub-core/loader/arm64/efi/linux.c +++ b/grub-core/loader/arm64/efi/linux.c @@ -86,7 +86,10 @@ grub_efi_linux_boot (void *kernel_address, grub_off_t offset, { handover_func hf; + grub_dprintf ("linux", "kernel_addr: %p handover_offset: %p params: %p\n", + kernel_address, (void *)(grub_efi_uintn_t)offset, kernel_params); hf = (handover_func)((char *)kernel_address + offset); + grub_dprintf ("linux", "handover_func() = %p\n", hf); hf (grub_efi_image_handle, grub_efi_system_table, kernel_params); return GRUB_ERR_BUG; diff --git a/include/grub/arm/linux.h b/include/grub/arm/linux.h index 775297db8..b582f67f6 100644 --- a/include/grub/arm/linux.h +++ b/include/grub/arm/linux.h @@ -31,7 +31,7 @@ struct linux_arm_kernel_header { grub_uint32_t magic; grub_uint32_t start; /* _start */ grub_uint32_t end; /* _edata */ - grub_uint32_t reserved2[4]; + grub_uint32_t reserved2[3]; grub_uint32_t hdr_offset; }; -- 2.26.2
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor