mirror of
https://github.com/acidanthera/audk.git
synced 2025-07-26 23:24:03 +02:00
MdeModulePkg: Moved IsHeapGuardEnabled() and IsMemoryTypeToGuard() to MemoryPoolLib.
This commit is contained in:
parent
abdfba8835
commit
8a7bd316ef
@ -572,58 +572,6 @@ UnsetGuardPage (
|
|||||||
mOnGuarding = FALSE;
|
mOnGuarding = FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Check to see if the memory at the given address should be guarded or not.
|
|
||||||
|
|
||||||
@param[in] MemoryType Memory type to check.
|
|
||||||
@param[in] AllocateType Allocation type to check.
|
|
||||||
@param[in] PageOrPool Indicate a page allocation or pool allocation.
|
|
||||||
|
|
||||||
|
|
||||||
@return TRUE The given type of memory should be guarded.
|
|
||||||
@return FALSE The given type of memory should not be guarded.
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
IsMemoryTypeToGuard (
|
|
||||||
IN EFI_MEMORY_TYPE MemoryType,
|
|
||||||
IN EFI_ALLOCATE_TYPE AllocateType,
|
|
||||||
IN UINT8 PageOrPool
|
|
||||||
)
|
|
||||||
{
|
|
||||||
UINT64 TestBit;
|
|
||||||
UINT64 ConfigBit;
|
|
||||||
|
|
||||||
if (AllocateType == AllocateAddress) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((PcdGet8 (PcdHeapGuardPropertyMask) & PageOrPool) == 0) {
|
|
||||||
return FALSE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (PageOrPool == GUARD_HEAP_TYPE_POOL) {
|
|
||||||
ConfigBit = PcdGet64 (PcdHeapGuardPoolType);
|
|
||||||
} else if (PageOrPool == GUARD_HEAP_TYPE_PAGE) {
|
|
||||||
ConfigBit = PcdGet64 (PcdHeapGuardPageType);
|
|
||||||
} else {
|
|
||||||
ConfigBit = (UINT64)-1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((UINT32)MemoryType >= MEMORY_TYPE_OS_RESERVED_MIN) {
|
|
||||||
TestBit = BIT63;
|
|
||||||
} else if ((UINT32)MemoryType >= MEMORY_TYPE_OEM_RESERVED_MIN) {
|
|
||||||
TestBit = BIT62;
|
|
||||||
} else if (MemoryType < EfiMaxMemoryType) {
|
|
||||||
TestBit = LShiftU64 (1, MemoryType);
|
|
||||||
} else if (MemoryType == EfiMaxMemoryType) {
|
|
||||||
TestBit = (UINT64)-1;
|
|
||||||
} else {
|
|
||||||
TestBit = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
return ((ConfigBit & TestBit) != 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Check to see if the pool at the given address should be guarded or not.
|
Check to see if the pool at the given address should be guarded or not.
|
||||||
|
|
||||||
@ -663,21 +611,6 @@ IsPageTypeToGuard (
|
|||||||
return IsMemoryTypeToGuard (MemoryType, AllocateType, GUARD_HEAP_TYPE_PAGE);
|
return IsMemoryTypeToGuard (MemoryType, AllocateType, GUARD_HEAP_TYPE_PAGE);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
Check to see if the heap guard is enabled for page and/or pool allocation.
|
|
||||||
|
|
||||||
@param[in] GuardType Specify the sub-type(s) of Heap Guard.
|
|
||||||
|
|
||||||
@return TRUE/FALSE.
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
IsHeapGuardEnabled (
|
|
||||||
UINT8 GuardType
|
|
||||||
)
|
|
||||||
{
|
|
||||||
return IsMemoryTypeToGuard (EfiMaxMemoryType, AllocateAnyPages, GuardType);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Set head Guard and tail Guard for the given memory range.
|
Set head Guard and tail Guard for the given memory range.
|
||||||
|
|
||||||
|
@ -149,15 +149,6 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
|||||||
(1 << GUARDED_HEAP_MAP_ENTRY_SHIFT) - 1 \
|
(1 << GUARDED_HEAP_MAP_ENTRY_SHIFT) - 1 \
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// Memory type to guard (matching the related PCD definition)
|
|
||||||
//
|
|
||||||
#define GUARD_HEAP_TYPE_PAGE BIT0
|
|
||||||
#define GUARD_HEAP_TYPE_POOL BIT1
|
|
||||||
#define GUARD_HEAP_TYPE_FREED BIT4
|
|
||||||
#define GUARD_HEAP_TYPE_ALL \
|
|
||||||
(GUARD_HEAP_TYPE_PAGE|GUARD_HEAP_TYPE_POOL|GUARD_HEAP_TYPE_FREED)
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Debug message level
|
// Debug message level
|
||||||
//
|
//
|
||||||
@ -391,18 +382,6 @@ AdjustPoolHeadF (
|
|||||||
IN UINTN Size
|
IN UINTN Size
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
|
||||||
Check to see if the heap guard is enabled for page and/or pool allocation.
|
|
||||||
|
|
||||||
@param[in] GuardType Specify the sub-type(s) of Heap Guard.
|
|
||||||
|
|
||||||
@return TRUE/FALSE.
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
IsHeapGuardEnabled (
|
|
||||||
UINT8 GuardType
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Notify function used to set all Guard pages after CPU Arch Protocol installed.
|
Notify function used to set all Guard pages after CPU Arch Protocol installed.
|
||||||
**/
|
**/
|
||||||
|
@ -25,6 +25,15 @@ SPDX-License-Identifier: BSD-2-Clause-Patent
|
|||||||
#define MEMORY_TYPE_OEM_RESERVED_MIN 0x70000000
|
#define MEMORY_TYPE_OEM_RESERVED_MIN 0x70000000
|
||||||
#define MEMORY_TYPE_OEM_RESERVED_MAX 0x7FFFFFFF
|
#define MEMORY_TYPE_OEM_RESERVED_MAX 0x7FFFFFFF
|
||||||
|
|
||||||
|
//
|
||||||
|
// Memory type to guard (matching the related PCD definition)
|
||||||
|
//
|
||||||
|
#define GUARD_HEAP_TYPE_PAGE BIT0
|
||||||
|
#define GUARD_HEAP_TYPE_POOL BIT1
|
||||||
|
#define GUARD_HEAP_TYPE_FREED BIT4
|
||||||
|
#define GUARD_HEAP_TYPE_ALL \
|
||||||
|
(GUARD_HEAP_TYPE_PAGE|GUARD_HEAP_TYPE_POOL|GUARD_HEAP_TYPE_FREED)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Called to initialize the pool.
|
Called to initialize the pool.
|
||||||
|
|
||||||
@ -143,4 +152,34 @@ CoreFreePoolI (
|
|||||||
OUT EFI_MEMORY_TYPE *PoolType OPTIONAL
|
OUT EFI_MEMORY_TYPE *PoolType OPTIONAL
|
||||||
);
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check to see if the heap guard is enabled for page and/or pool allocation.
|
||||||
|
|
||||||
|
@param[in] GuardType Specify the sub-type(s) of Heap Guard.
|
||||||
|
|
||||||
|
@return TRUE/FALSE.
|
||||||
|
**/
|
||||||
|
BOOLEAN
|
||||||
|
IsHeapGuardEnabled (
|
||||||
|
UINT8 GuardType
|
||||||
|
);
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check to see if the memory at the given address should be guarded or not.
|
||||||
|
|
||||||
|
@param[in] MemoryType Memory type to check.
|
||||||
|
@param[in] AllocateType Allocation type to check.
|
||||||
|
@param[in] PageOrPool Indicate a page allocation or pool allocation.
|
||||||
|
|
||||||
|
|
||||||
|
@return TRUE The given type of memory should be guarded.
|
||||||
|
@return FALSE The given type of memory should not be guarded.
|
||||||
|
**/
|
||||||
|
BOOLEAN
|
||||||
|
IsMemoryTypeToGuard (
|
||||||
|
IN EFI_MEMORY_TYPE MemoryType,
|
||||||
|
IN EFI_ALLOCATE_TYPE AllocateType,
|
||||||
|
IN UINT8 PageOrPool
|
||||||
|
);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -11,8 +11,6 @@
|
|||||||
|
|
||||||
extern BOOLEAN mOnGuarding;
|
extern BOOLEAN mOnGuarding;
|
||||||
|
|
||||||
#define GUARD_HEAP_TYPE_FREED BIT4
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Check to see if the pool at the given address should be guarded or not.
|
Check to see if the pool at the given address should be guarded or not.
|
||||||
|
|
||||||
@ -102,18 +100,6 @@ InstallMemoryAttributesTableOnMemoryAllocation (
|
|||||||
IN EFI_MEMORY_TYPE MemoryType
|
IN EFI_MEMORY_TYPE MemoryType
|
||||||
);
|
);
|
||||||
|
|
||||||
/**
|
|
||||||
Check to see if the heap guard is enabled for page and/or pool allocation.
|
|
||||||
|
|
||||||
@param[in] GuardType Specify the sub-type(s) of Heap Guard.
|
|
||||||
|
|
||||||
@return TRUE/FALSE.
|
|
||||||
**/
|
|
||||||
BOOLEAN
|
|
||||||
IsHeapGuardEnabled (
|
|
||||||
UINT8 GuardType
|
|
||||||
);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
Adjust the pool head position to make sure the Guard page is adjavent to
|
Adjust the pool head position to make sure the Guard page is adjavent to
|
||||||
pool tail or pool head.
|
pool tail or pool head.
|
||||||
|
@ -36,4 +36,6 @@
|
|||||||
UefiLib
|
UefiLib
|
||||||
|
|
||||||
[Pcd]
|
[Pcd]
|
||||||
|
gEfiMdeModulePkgTokenSpaceGuid.PcdHeapGuardPageType ## CONSUMES
|
||||||
|
gEfiMdeModulePkgTokenSpaceGuid.PcdHeapGuardPoolType ## CONSUMES
|
||||||
gEfiMdeModulePkgTokenSpaceGuid.PcdHeapGuardPropertyMask ## CONSUMES
|
gEfiMdeModulePkgTokenSpaceGuid.PcdHeapGuardPropertyMask ## CONSUMES
|
||||||
|
@ -809,3 +809,70 @@ CoreFreePoolI (
|
|||||||
|
|
||||||
return EFI_SUCCESS;
|
return EFI_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check to see if the heap guard is enabled for page and/or pool allocation.
|
||||||
|
|
||||||
|
@param[in] GuardType Specify the sub-type(s) of Heap Guard.
|
||||||
|
|
||||||
|
@return TRUE/FALSE.
|
||||||
|
**/
|
||||||
|
BOOLEAN
|
||||||
|
IsHeapGuardEnabled (
|
||||||
|
UINT8 GuardType
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return IsMemoryTypeToGuard (EfiMaxMemoryType, AllocateAnyPages, GuardType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
Check to see if the memory at the given address should be guarded or not.
|
||||||
|
|
||||||
|
@param[in] MemoryType Memory type to check.
|
||||||
|
@param[in] AllocateType Allocation type to check.
|
||||||
|
@param[in] PageOrPool Indicate a page allocation or pool allocation.
|
||||||
|
|
||||||
|
|
||||||
|
@return TRUE The given type of memory should be guarded.
|
||||||
|
@return FALSE The given type of memory should not be guarded.
|
||||||
|
**/
|
||||||
|
BOOLEAN
|
||||||
|
IsMemoryTypeToGuard (
|
||||||
|
IN EFI_MEMORY_TYPE MemoryType,
|
||||||
|
IN EFI_ALLOCATE_TYPE AllocateType,
|
||||||
|
IN UINT8 PageOrPool
|
||||||
|
)
|
||||||
|
{
|
||||||
|
UINT64 TestBit;
|
||||||
|
UINT64 ConfigBit;
|
||||||
|
|
||||||
|
if (AllocateType == AllocateAddress) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((PcdGet8 (PcdHeapGuardPropertyMask) & PageOrPool) == 0) {
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (PageOrPool == GUARD_HEAP_TYPE_POOL) {
|
||||||
|
ConfigBit = PcdGet64 (PcdHeapGuardPoolType);
|
||||||
|
} else if (PageOrPool == GUARD_HEAP_TYPE_PAGE) {
|
||||||
|
ConfigBit = PcdGet64 (PcdHeapGuardPageType);
|
||||||
|
} else {
|
||||||
|
ConfigBit = (UINT64)-1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((UINT32)MemoryType >= MEMORY_TYPE_OS_RESERVED_MIN) {
|
||||||
|
TestBit = BIT63;
|
||||||
|
} else if ((UINT32)MemoryType >= MEMORY_TYPE_OEM_RESERVED_MIN) {
|
||||||
|
TestBit = BIT62;
|
||||||
|
} else if (MemoryType < EfiMaxMemoryType) {
|
||||||
|
TestBit = LShiftU64 (1, MemoryType);
|
||||||
|
} else if (MemoryType == EfiMaxMemoryType) {
|
||||||
|
TestBit = (UINT64)-1;
|
||||||
|
} else {
|
||||||
|
TestBit = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ((ConfigBit & TestBit) != 0);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user