\r
Frees the number of 4KB pages specified by Pages from the buffer specified by Buffer. Buffer\r
must have been allocated on a previous call to the page allocation services of the Memory\r
- Allocation Library.\r
+ Allocation Library. If it is not possible to free allocated pages, then this function will\r
+ perform no actions.\r
\r
If Buffer was not allocated with a page allocation function in the Memory Allocation Library,\r
then ASSERT().\r
IN UINTN Pages\r
)\r
{\r
+ ASSERT (Pages != 0);\r
//\r
// PEI phase does not support to free pages, so leave it as NOP.\r
//\r
\r
Frees the number of 4KB pages specified by Pages from the buffer specified by Buffer. Buffer\r
must have been allocated on a previous call to the aligned page allocation services of the Memory\r
- Allocation Library.\r
+ Allocation Library. If it is not possible to free allocated pages, then this function will \r
+ perform no actions.\r
\r
If Buffer was not allocated with an aligned page allocation function in the Memory Allocation\r
Library, then ASSERT().\r
IN UINTN Pages\r
)\r
{\r
+ ASSERT (Pages != 0);\r
//\r
// PEI phase does not support to free pages, so leave it as NOP.\r
//\r
}\r
\r
/**\r
- Allocates and zeros a buffer of a certian pool type.\r
+ Allocates and zeros a buffer of a certain pool type.\r
\r
- Allocates the number bytes specified by AllocationSize of a certian pool type, clears the buffer\r
+ Allocates the number bytes specified by AllocationSize of a certain pool type, clears the buffer\r
with zeros, and returns a pointer to the allocated buffer. If AllocationSize is 0, then a valid\r
buffer of 0 size is returned. If there is not enough memory remaining to satisfy the request,\r
then NULL is returned.\r
}\r
\r
/**\r
- Copies a buffer to an allocated buffer of a certian pool type.\r
+ Copies a buffer to an allocated buffer of a certain pool type.\r
\r
- Allocates the number bytes specified by AllocationSize of a certian pool type, copies\r
+ Allocates the number bytes specified by AllocationSize of a certain pool type, copies\r
AllocationSize bytes from Buffer to the newly allocated buffer, and returns a pointer to the\r
allocated buffer. If AllocationSize is 0, then a valid buffer of 0 size is returned. If there\r
is not enough memory remaining to satisfy the request, then NULL is returned.\r
If NewSize is 0, then a valid buffer of 0 size is returned. If there is not \r
enough memory remaining to satisfy the request, then NULL is returned.\r
\r
- If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
- If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
+ If the smaller of NewSize and OldSize is greater than (MAX_ADDRESS - OldBuffer + 1),\r
+ then ASSERT(). \r
\r
@param PoolType The type of pool to allocate.\r
@param OldSize The size, in bytes, of OldBuffer.\r
{\r
VOID *NewBuffer;\r
\r
- NewBuffer = AllocateZeroPool (NewSize);\r
+ //\r
+ // Check the boundary for OldBuffer even if the allocation failure.\r
+ //\r
+ ASSERT (OldBuffer == NULL || MIN (OldSize, NewSize) <= MAX_ADDRESS - (UINTN) OldBuffer + 1);\r
+ NewBuffer = InternalAllocateZeroPool (PoolType, NewSize);\r
if (NewBuffer != NULL && OldBuffer != NULL) {\r
CopyMem (NewBuffer, OldBuffer, MIN (OldSize, NewSize));\r
FreePool (OldBuffer);\r
If NewSize is 0, then a valid buffer of 0 size is returned. If there is not \r
enough memory remaining to satisfy the request, then NULL is returned.\r
\r
- If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
- If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
+ If the smaller of NewSize and OldSize is greater than (MAX_ADDRESS - OldBuffer + 1),\r
+ then ASSERT(). \r
\r
@param OldSize The size, in bytes, of OldBuffer.\r
@param NewSize The size, in bytes, of the buffer to reallocate.\r
If NewSize is 0, then a valid buffer of 0 size is returned. If there is not \r
enough memory remaining to satisfy the request, then NULL is returned.\r
\r
- If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
- If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
+ If the smaller of NewSize and OldSize is greater than (MAX_ADDRESS - OldBuffer + 1),\r
+ then ASSERT(). \r
\r
@param OldSize The size, in bytes, of OldBuffer.\r
@param NewSize The size, in bytes, of the buffer to reallocate.\r
If NewSize is 0, then a valid buffer of 0 size is returned. If there is not \r
enough memory remaining to satisfy the request, then NULL is returned.\r
\r
- If NewSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
- If OldSize is greater than (MAX_ADDRESS - Buffer + 1), then ASSERT(). \r
+ If the smaller of NewSize and OldSize is greater than (MAX_ADDRESS - OldBuffer + 1),\r
+ then ASSERT(). \r
\r
@param OldSize The size, in bytes, of OldBuffer.\r
@param NewSize The size, in bytes, of the buffer to reallocate.\r
Memory Allocation Library.\r
\r
Frees the buffer specified by Buffer. Buffer must have been allocated on a previous call to the\r
- pool allocation services of the Memory Allocation Library.\r
+ pool allocation services of the Memory Allocation Library. If it is not possible to free pool\r
+ resources, then this function will perform no actions.\r
\r
If Buffer was not allocated with a pool allocation function in the Memory Allocation Library,\r
then ASSERT().\r