[edk2,v2,3/5] MdeModulePkg/DxeCore: pass pool type to CoreFreePoolPages ()

Message ID 1487948699-3179-4-git-send-email-ard.biesheuvel@linaro.org
State New
Headers show
Series
  • RFC: increased memory protection
Related show

Commit Message

Ard Biesheuvel Feb. 24, 2017, 3:04 p.m.
In order to make it easier to manage memory permission attributes of
page allocations performed on behalf of the pool allocator, pass the
pool type when freeing pages. This way, we can easily check whether
the freed pages need to have their permission attributes changed.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

---
 MdeModulePkg/Core/Dxe/Mem/Imem.h | 2 ++
 MdeModulePkg/Core/Dxe/Mem/Page.c | 1 +
 MdeModulePkg/Core/Dxe/Mem/Pool.c | 5 +++--
 3 files changed, 6 insertions(+), 2 deletions(-)

-- 
2.7.4

_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Patch

diff --git a/MdeModulePkg/Core/Dxe/Mem/Imem.h b/MdeModulePkg/Core/Dxe/Mem/Imem.h
index fb53f95575f0..fde533100d37 100644
--- a/MdeModulePkg/Core/Dxe/Mem/Imem.h
+++ b/MdeModulePkg/Core/Dxe/Mem/Imem.h
@@ -77,12 +77,14 @@  CoreAllocatePoolPages (
 /**
   Internal function.  Frees pool pages allocated via AllocatePoolPages ()
 
+  @param  PoolType               The memory type of the pool pages
   @param  Memory                 The base address to free
   @param  NumberOfPages          The number of pages to free
 
 **/
 VOID
 CoreFreePoolPages (
+  IN EFI_MEMORY_TYPE        PoolType,
   IN EFI_PHYSICAL_ADDRESS   Memory,
   IN UINTN                  NumberOfPages
   );
diff --git a/MdeModulePkg/Core/Dxe/Mem/Page.c b/MdeModulePkg/Core/Dxe/Mem/Page.c
index bda4f6397e91..6330d41e7b3b 100644
--- a/MdeModulePkg/Core/Dxe/Mem/Page.c
+++ b/MdeModulePkg/Core/Dxe/Mem/Page.c
@@ -1871,6 +1871,7 @@  CoreAllocatePoolPages (
 **/
 VOID
 CoreFreePoolPages (
+  IN EFI_MEMORY_TYPE        PoolType,
   IN EFI_PHYSICAL_ADDRESS   Memory,
   IN UINTN                  NumberOfPages
   )
diff --git a/MdeModulePkg/Core/Dxe/Mem/Pool.c b/MdeModulePkg/Core/Dxe/Mem/Pool.c
index 7afd2d312c1d..9e15e0cfb5b2 100644
--- a/MdeModulePkg/Core/Dxe/Mem/Pool.c
+++ b/MdeModulePkg/Core/Dxe/Mem/Pool.c
@@ -624,7 +624,7 @@  CoreFreePoolI (
     //
     NoPages = EFI_SIZE_TO_PAGES(Size) + EFI_SIZE_TO_PAGES (Granularity) - 1;
     NoPages &= ~(UINTN)(EFI_SIZE_TO_PAGES (Granularity) - 1);
-    CoreFreePoolPages ((EFI_PHYSICAL_ADDRESS) (UINTN) Head, NoPages);
+    CoreFreePoolPages (Pool->MemoryType, (EFI_PHYSICAL_ADDRESS) (UINTN) Head, NoPages);
 
   } else {
 
@@ -680,7 +680,8 @@  CoreFreePoolI (
         //
         // Free the page
         //
-        CoreFreePoolPages ((EFI_PHYSICAL_ADDRESS) (UINTN)NewPage, EFI_SIZE_TO_PAGES (Granularity));
+        CoreFreePoolPages (Pool->MemoryType, (EFI_PHYSICAL_ADDRESS) (UINTN)NewPage,
+          EFI_SIZE_TO_PAGES (Granularity));
       }
     }
   }