Blame SOURCES/0278-nx-set-the-nx-compatible-flag-in-EFI-grub-images.patch

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