|
|
b9d01e |
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
|
|
b9d01e |
From: Peter Jones <pjones@redhat.com>
|
|
|
b9d01e |
Date: Tue, 22 Mar 2022 10:57:20 -0400
|
|
|
b9d01e |
Subject: [PATCH] nx: set the nx compatible flag in EFI grub images
|
|
|
b9d01e |
|
|
|
b9d01e |
For NX, we need the grub binary to announce that it is compatible with
|
|
|
b9d01e |
the NX feature. This implies that when loading the executable grub
|
|
|
b9d01e |
image, several attributes are true:
|
|
|
b9d01e |
|
|
|
b9d01e |
- the binary doesn't need an executable stack
|
|
|
b9d01e |
- the binary doesn't need sections to be both executable and writable
|
|
|
b9d01e |
- the binary knows how to use the EFI Memory Attributes protocol on code
|
|
|
b9d01e |
it is loading.
|
|
|
b9d01e |
|
|
|
b9d01e |
This patch adds a definition for the PE DLL Characteristics flag
|
|
|
b9d01e |
GRUB_PE32_NX_COMPAT, and changes grub-mkimage to set that flag.
|
|
|
b9d01e |
|
|
|
b9d01e |
Signed-off-by: Peter Jones <pjones@redhat.com>
|
|
|
b9d01e |
(cherry picked from commit 0c7f1aed5a87f75051b421903a900ccb4bbd795a)
|
|
|
b9d01e |
(cherry picked from commit 2f9446d488da96de963f4ffe03b0a1c60a4664f5)
|
|
|
b9d01e |
[rharwood: fix uninitialized use of stack_attrs]
|
|
|
b9d01e |
Signed-off-by: Robbie Harwood <rharwood@redhat.com>
|
|
|
b9d01e |
---
|
|
|
b9d01e |
util/mkimage.c | 1 +
|
|
|
b9d01e |
1 file changed, 1 insertion(+)
|
|
|
b9d01e |
|
|
|
b9d01e |
diff --git a/util/mkimage.c b/util/mkimage.c
|
|
|
b9d01e |
index 16418e245d..c77025904c 100644
|
|
|
b9d01e |
--- a/util/mkimage.c
|
|
|
b9d01e |
+++ b/util/mkimage.c
|
|
|
b9d01e |
@@ -1358,6 +1358,7 @@ grub_install_generate_image (const char *dir, const char *prefix,
|
|
|
b9d01e |
section = (struct grub_pe32_section_table *)(o64 + 1);
|
|
|
b9d01e |
}
|
|
|
b9d01e |
|
|
|
b9d01e |
+ PE_OHDR (o32, o64, dll_characteristics) = grub_host_to_target16 (GRUB_PE32_NX_COMPAT);
|
|
|
b9d01e |
PE_OHDR (o32, o64, header_size) = grub_host_to_target32 (header_size);
|
|
|
b9d01e |
PE_OHDR (o32, o64, entry_addr) = grub_host_to_target32 (layout.start_address);
|
|
|
b9d01e |
PE_OHDR (o32, o64, image_base) = 0;
|