52d23fe
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
52d23fe
From: Maximilian Luz <luzmaximilian@gmail.com>
52d23fe
Date: Tue, 28 Jun 2022 23:06:46 +0200
52d23fe
Subject: [PATCH] arm64: Use proper memory type for kernel allocation
52d23fe
52d23fe
Currently, the kernel pages are allocated with type EFI_LOADER_DATA.
52d23fe
While the vast majority of systems will happily execute code from those
52d23fe
pages (i.e. don't care about memory protection), the Microsoft Surface
52d23fe
Pro X stalls, as this memory is not designated as "executable".
52d23fe
52d23fe
Therefore, allocate the kernel pages as EFI_LOADER_CODE to request
52d23fe
memory that is actually executable.
52d23fe
52d23fe
Signed-off-by: Maximilian Luz <luzmaximilian@gmail.com>
52d23fe
---
52d23fe
 grub-core/loader/arm64/linux.c | 7 ++++++-
52d23fe
 1 file changed, 6 insertions(+), 1 deletion(-)
52d23fe
52d23fe
diff --git a/grub-core/loader/arm64/linux.c b/grub-core/loader/arm64/linux.c
52d23fe
index 419f2201df8b..a3a193c255e9 100644
52d23fe
--- a/grub-core/loader/arm64/linux.c
52d23fe
+++ b/grub-core/loader/arm64/linux.c
52d23fe
@@ -26,7 +26,9 @@
52d23fe
 #include <grub/mm.h>
52d23fe
 #include <grub/types.h>
52d23fe
 #include <grub/cpu/linux.h>
52d23fe
+#include <grub/efi/api.h>
52d23fe
 #include <grub/efi/efi.h>
52d23fe
+#include <grub/cpu/efi/memory.h>
52d23fe
 #include <grub/efi/fdtload.h>
52d23fe
 #include <grub/efi/memory.h>
52d23fe
 #include <grub/efi/linux.h>
52d23fe
@@ -403,7 +405,10 @@ grub_cmd_linux (grub_command_t cmd __attribute__ ((unused)),
52d23fe
   grub_loader_unset();
52d23fe
 
52d23fe
   kernel_alloc_pages = GRUB_EFI_BYTES_TO_PAGES (kernel_size + align - 1);
52d23fe
-  kernel_alloc_addr = grub_efi_allocate_any_pages (kernel_alloc_pages);
52d23fe
+  kernel_alloc_addr = grub_efi_allocate_pages_real (GRUB_EFI_MAX_USABLE_ADDRESS,
52d23fe
+						    kernel_alloc_pages,
52d23fe
+						    GRUB_EFI_ALLOCATE_MAX_ADDRESS,
52d23fe
+						    GRUB_EFI_LOADER_CODE);
52d23fe
   grub_dprintf ("linux", "kernel numpages: %d\n", kernel_alloc_pages);
52d23fe
   if (!kernel_alloc_addr)
52d23fe
     {