[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[PATCH RFC 2/3] relocator: allocate trampoline in lower 640k
From: |
Baskov Evgeniy |
Subject: |
[PATCH RFC 2/3] relocator: allocate trampoline in lower 640k |
Date: |
Thu, 7 Apr 2022 06:32:27 +0300 |
For simplification, allocate trampoline in lower memory
for every x86 variation.
This would help setting right attributes for memory
in UEFI environments that restricts execution of some
memory regions.
Signed-off-by: Baskov Evgeniy <baskov@ispras.ru>
diff --git a/grub-core/lib/i386/relocator.c b/grub-core/lib/i386/relocator.c
index 54a1dcd8b..0b5a22dea 100644
--- a/grub-core/lib/i386/relocator.c
+++ b/grub-core/lib/i386/relocator.c
@@ -172,14 +172,13 @@ grub_relocator16_boot (struct grub_relocator *rel,
grub_err_t
grub_relocator64_boot (struct grub_relocator *rel,
- struct grub_relocator64_state state,
- grub_addr_t min_addr, grub_addr_t max_addr)
+ struct grub_relocator64_state state)
{
grub_err_t err;
void *relst;
grub_relocator_chunk_t ch;
- err = grub_relocator_alloc_chunk_align_safe (rel, &ch, min_addr, max_addr,
+ err = grub_relocator_alloc_chunk_align_safe (rel, &ch, 0x1000, 0xa0000,
RELOCATOR_SIZEOF (64), 16,
GRUB_RELOCATOR_PREFERENCE_NONE,
0);
if (err)
diff --git a/grub-core/lib/relocator.c b/grub-core/lib/relocator.c
index 68ef1289a..131b6859f 100644
--- a/grub-core/lib/relocator.c
+++ b/grub-core/lib/relocator.c
@@ -24,6 +24,7 @@
#include <grub/memory.h>
#include <grub/dl.h>
#include <grub/i18n.h>
+#include <grub/efi/efi.h>
GRUB_MOD_LICENSE ("GPLv3+");
diff --git a/grub-core/lib/x86_64/efi/relocator.c
b/grub-core/lib/x86_64/efi/relocator.c
index 7d200a125..d438f9a05 100644
--- a/grub-core/lib/x86_64/efi/relocator.c
+++ b/grub-core/lib/x86_64/efi/relocator.c
@@ -47,10 +47,10 @@ grub_relocator64_efi_boot (struct grub_relocator *rel,
grub_relocator_chunk_t ch;
/*
- * 64-bit relocator code may live above 4 GiB quite well.
- * However, I do not want ask for problems. Just in case.
+ * GRUB relocator may be placed at any address but GRUB EFI setup code
+ * only guaranties the range [0x1000; 0xa0000) to be executable.
*/
- err = grub_relocator_alloc_chunk_align_safe (rel, &ch, 0, 0x100000000,
+ err = grub_relocator_alloc_chunk_align_safe (rel, &ch, 0, 0xa0000,
RELOCATOR_SIZEOF (64_efi), 16,
GRUB_RELOCATOR_PREFERENCE_NONE,
1);
if (err)
diff --git a/grub-core/loader/i386/bsd.c b/grub-core/loader/i386/bsd.c
index 799a24cd2..8b4ae5ba2 100644
--- a/grub-core/loader/i386/bsd.c
+++ b/grub-core/loader/i386/bsd.c
@@ -763,7 +763,7 @@ grub_freebsd_boot (void)
stack[0] = entry;
stack[1] = bi.tags;
stack[2] = kern_end;
- return grub_relocator64_boot (relocator, state, 0, 0x40000000);
+ return grub_relocator64_boot (relocator, state);
}
else
{
diff --git a/include/grub/i386/relocator.h b/include/grub/i386/relocator.h
index 2a56c3b54..0dbd1f25c 100644
--- a/include/grub/i386/relocator.h
+++ b/include/grub/i386/relocator.h
@@ -87,8 +87,7 @@ grub_err_t grub_relocator32_boot (struct grub_relocator *rel,
int avoid_efi_bootservices);
grub_err_t grub_relocator64_boot (struct grub_relocator *rel,
- struct grub_relocator64_state state,
- grub_addr_t min_addr, grub_addr_t max_addr);
+ struct grub_relocator64_state state);
#ifdef GRUB_MACHINE_EFI
#ifdef __x86_64__
--
2.35.1