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