]> git.proxmox.com Git - mirror_edk2.git/blobdiff - MdeModulePkg/Universal/Acpi/BootScriptExecutorDxe/ScriptExecute.c
MdeModulePkg/BootScriptExecutorDxe: remove NX attr for FfsBuffer
[mirror_edk2.git] / MdeModulePkg / Universal / Acpi / BootScriptExecutorDxe / ScriptExecute.c
index 4545d6e5810cd38889dfd6a3fb090e68d432093f..263a282188340c6c24ba68041a85ca8fa7fb6b53 100644 (file)
@@ -273,6 +273,7 @@ ReadyToLockEventNotify (
   UINTN                                         Pages;\r
   EFI_PHYSICAL_ADDRESS                          FfsBuffer;\r
   PE_COFF_LOADER_IMAGE_CONTEXT                  ImageContext;\r
+  EFI_GCD_MEMORY_SPACE_DESCRIPTOR               MemDesc;\r
 \r
   Status = gBS->LocateProtocol (&gEfiDxeSmmReadyToLockProtocolGuid, NULL, &Interface);\r
   if (EFI_ERROR (Status)) {\r
@@ -322,6 +323,19 @@ ReadyToLockEventNotify (
                   &FfsBuffer\r
                   );\r
   ASSERT_EFI_ERROR (Status);\r
+\r
+  //\r
+  // Make sure that the buffer can be used to store code.\r
+  //\r
+  Status = gDS->GetMemorySpaceDescriptor (FfsBuffer, &MemDesc);\r
+  if (!EFI_ERROR (Status) && (MemDesc.Attributes & EFI_MEMORY_XP) != 0) {\r
+    gDS->SetMemorySpaceAttributes (\r
+           FfsBuffer,\r
+           EFI_PAGES_TO_SIZE (Pages),\r
+           MemDesc.Attributes & (~EFI_MEMORY_XP)\r
+           );\r
+  }\r
+\r
   ImageContext.ImageAddress = (PHYSICAL_ADDRESS)(UINTN)FfsBuffer;\r
   //\r
   // Align buffer on section boundary\r