diff options
-rw-r--r-- | EdkModulePkg/Core/Pei/Memory/MemoryServices.c | 8 | ||||
-rw-r--r-- | MdePkg/Include/Library/DebugLib.h | 12 | ||||
-rw-r--r-- | MdePkg/Include/Library/PrintLib.h | 2 | ||||
-rw-r--r-- | MdePkg/Library/BasePrintLib/PrintLib.c | 24 | ||||
-rw-r--r-- | MdePkg/Library/BasePrintLib/PrintLibInternal.c | 23 | ||||
-rw-r--r-- | MdePkg/Library/BasePrintLib/PrintLibInternal.h | 10 | ||||
-rw-r--r-- | MdePkg/Library/DxeMemoryAllocationLib/MemoryAllocationLib.c | 23 | ||||
-rw-r--r-- | MdePkg/Library/PeiMemoryAllocationLib/MemoryAllocationLib.c | 13 | ||||
-rw-r--r-- | MdePkg/Library/UefiLib/Console.c | 4 |
9 files changed, 74 insertions, 45 deletions
diff --git a/EdkModulePkg/Core/Pei/Memory/MemoryServices.c b/EdkModulePkg/Core/Pei/Memory/MemoryServices.c index 48b2b3818c..eb99a8040d 100644 --- a/EdkModulePkg/Core/Pei/Memory/MemoryServices.c +++ b/EdkModulePkg/Core/Pei/Memory/MemoryServices.c @@ -301,8 +301,12 @@ Returns: EFI_STATUS Status;
EFI_HOB_MEMORY_POOL *Hob;
-
- Status = PeiCoreCreateHob (
+ //
+ // If some ¡°post-memory¡± PEIM wishes to allocate larger pool,
+ // it should use AllocatePages service instead.
+ //
+ ASSERT (Size < 0x10000 - sizeof (EFI_HOB_MEMORY_POOL));
+ Status = PeiCoreCreateHob (
EFI_HOB_TYPE_PEI_MEMORY_POOL,
(UINT16)(sizeof (EFI_HOB_MEMORY_POOL) + Size),
(VOID **)&Hob
diff --git a/MdePkg/Include/Library/DebugLib.h b/MdePkg/Include/Library/DebugLib.h index 82f9e6fdba..5efb304016 100644 --- a/MdePkg/Include/Library/DebugLib.h +++ b/MdePkg/Include/Library/DebugLib.h @@ -72,7 +72,7 @@ DebugPrint ( Prints an assert message containing a filename, line number, and description.
This may be followed by a breakpoint or a dead loop.
- Print a message of the form “ASSERT <FileName>(<LineNumber>): <Description>\n”
+ Print a message of the form “ASSERT <FileName>(<LineNumber>): <Description>\n?
to the debug output device. If DEBUG_PROPERTY_ASSERT_BREAKPOINT_ENABLED bit of
PcdDebugProperyMask is set then CpuBreakpoint() is called. Otherwise, if
DEBUG_PROPERTY_ASSERT_DEADLOOP_ENABLED bit of PcdDebugProperyMask is set then
@@ -81,9 +81,9 @@ DebugPrint ( DebugAssert() must actively prevent recusrsion. If DebugAssert() is called while
processing another DebugAssert(), then DebugAssert() must return immediately.
- If FileName is NULL, then a <FileName> string of “(NULL) Filename” is printed.
+ If FileName is NULL, then a <FileName> string of ?NULL) Filename?is printed.
- If Description is NULL, then a <Description> string of “(NULL) Description” is printed.
+ If Description is NULL, then a <Description> string of ?NULL) Description?is printed.
@param FileName Pointer to the name of the source file that generated the assert condition.
@param LineNumber The line number in the source file that generated the assert condition
@@ -108,7 +108,7 @@ DebugAssert ( If Buffer is NULL, then ASSERT().
- If Length is greater than (MAX_ADDRESS – Buffer + 1), then ASSERT().
+ If Length is greater than (MAX_ADDRESS ?Buffer + 1), then ASSERT().
@param Buffer Pointer to the target buffer to fill with PcdDebugClearMemoryValue.
@param Length Number of bytes in Buffer to fill with zeros PcdDebugClearMemoryValue.
@@ -321,7 +321,7 @@ DebugClearMemoryEnabled ( _ASSERT (Guid already installed in database); \
} \
} else { \
- if (!EFI_ERROR (gBS->HandleProtocol (Guid, Handle, &Instance))) { \
+ if (!EFI_ERROR (gBS->HandleProtocol (Handle, Guid, &Instance))) { \
_ASSERT (Guid already installed on Handle); \
} \
} \
@@ -411,7 +411,7 @@ DebugClearMemoryEnabled ( by TYPE is compared to TestSignature. If the signatures match, then a pointer
to the pointer to a data structure of the type specified by TYPE is returned.
If the signatures do not match, then DebugAssert() is called with a description
- of “CR has a bad signature” and Record is returned.
+ of “CR has a bad signature?and Record is returned.
If the data type specified by TYPE does not contain the field specified by Field,
then the module will not compile.
diff --git a/MdePkg/Include/Library/PrintLib.h b/MdePkg/Include/Library/PrintLib.h index c84b7c36aa..3eb84f311b 100644 --- a/MdePkg/Include/Library/PrintLib.h +++ b/MdePkg/Include/Library/PrintLib.h @@ -98,6 +98,7 @@ AsciiSPrintUnicodeFormat ( );
UINTN
+EFIAPI
UnicodeValueToString (
IN OUT CHAR16 *Buffer,
IN UINTN Flags,
@@ -106,6 +107,7 @@ UnicodeValueToString ( );
UINTN
+EFIAPI
AsciiValueToString (
IN OUT CHAR8 *Buffer,
IN UINTN Flags,
diff --git a/MdePkg/Library/BasePrintLib/PrintLib.c b/MdePkg/Library/BasePrintLib/PrintLib.c index 816c887088..bbd0820106 100644 --- a/MdePkg/Library/BasePrintLib/PrintLib.c +++ b/MdePkg/Library/BasePrintLib/PrintLib.c @@ -637,3 +637,27 @@ AsciiSPrintUnicodeFormat ( VA_START (Marker, FormatString);
return AsciiVSPrintUnicodeFormat (StartOfBuffer, BufferSize, FormatString, Marker);
}
+
+UINTN
+EFIAPI
+UnicodeValueToString (
+ IN OUT CHAR16 *Buffer,
+ IN UINTN Flags,
+ IN INT64 Value,
+ IN UINTN Width
+ )
+{
+ return BasePrintLibConvertValueToString ((CHAR8 *)Buffer, Flags, Value, Width, 2);
+}
+
+UINTN
+EFIAPI
+AsciiValueToString (
+ IN OUT CHAR8 *Buffer,
+ IN UINTN Flags,
+ IN INT64 Value,
+ IN UINTN Width
+ )
+{
+ return BasePrintLibConvertValueToString ((CHAR8 *)Buffer, Flags, Value, Width, 1);
+}
diff --git a/MdePkg/Library/BasePrintLib/PrintLibInternal.c b/MdePkg/Library/BasePrintLib/PrintLibInternal.c index 24d8b56598..56d357525c 100644 --- a/MdePkg/Library/BasePrintLib/PrintLibInternal.c +++ b/MdePkg/Library/BasePrintLib/PrintLibInternal.c @@ -128,26 +128,3 @@ BasePrintLibConvertValueToString ( return ((Buffer - OriginalBuffer) / Increment);
}
-
-
-UINTN
-UnicodeValueToString (
- IN OUT CHAR16 *Buffer,
- IN UINTN Flags,
- IN INT64 Value,
- IN UINTN Width
- )
-{
- return BasePrintLibConvertValueToString ((CHAR8 *)Buffer, Flags, Value, Width, 2);
-}
-
-UINTN
-AsciiValueToString (
- IN OUT CHAR8 *Buffer,
- IN UINTN Flags,
- IN INT64 Value,
- IN UINTN Width
- )
-{
- return BasePrintLibConvertValueToString ((CHAR8 *)Buffer, Flags, Value, Width, 1);
-}
diff --git a/MdePkg/Library/BasePrintLib/PrintLibInternal.h b/MdePkg/Library/BasePrintLib/PrintLibInternal.h index de08f0edfc..c7fecfd34c 100644 --- a/MdePkg/Library/BasePrintLib/PrintLibInternal.h +++ b/MdePkg/Library/BasePrintLib/PrintLibInternal.h @@ -39,7 +39,7 @@ /// Maximum Length Decimal String = 28 "-9,223,372,036,854,775,808"
/// Maximum Length Hexidecimal String = 17 "FFFFFFFFFFFFFFFF"
/// Maximum Length GUID = 37 "00000000-0000-0000-0000-000000000000"
-/// Maximum Length TIME = 17 "12/12/2006 12:12"
+/// Maximum Length TIME = 18 "12/12/2006 12:12"
///
#define MAXIMUM_VALUE_CHARACTERS 38
@@ -85,3 +85,11 @@ BasePrintLibValueToString ( IN UINTN Radix
);
+UINTN
+BasePrintLibConvertValueToString (
+ IN OUT CHAR8 *Buffer,
+ IN UINTN Flags,
+ IN INT64 Value,
+ IN UINTN Width,
+ IN UINTN Increment
+ );
diff --git a/MdePkg/Library/DxeMemoryAllocationLib/MemoryAllocationLib.c b/MdePkg/Library/DxeMemoryAllocationLib/MemoryAllocationLib.c index ef643eed42..088a10bb56 100644 --- a/MdePkg/Library/DxeMemoryAllocationLib/MemoryAllocationLib.c +++ b/MdePkg/Library/DxeMemoryAllocationLib/MemoryAllocationLib.c @@ -168,13 +168,11 @@ InternalAllocateAlignedPages ( //
AlignmentMask = Alignment - 1;
RealPages = Pages + EFI_SIZE_TO_PAGES (Alignment);
- if (RealPages <= Pages) {
- //
- // This extra checking is to make sure that Pages plus EFI_SIZE_TO_PAGES (Alignment) does not overflow.
- //
- return NULL;
- }
-
+ //
+ // Make sure that Pages plus EFI_SIZE_TO_PAGES (Alignment) does not overflow.
+ //
+ ASSERT (RealPages > Pages);
+
Status = gBS->AllocatePages (AllocateAnyPages, MemoryType, RealPages, &Memory);
if (EFI_ERROR (Status)) {
return NULL;
@@ -601,12 +599,11 @@ InternalAllocateAlignedPool ( //
OverAllocationSize = sizeof (RawAddress) + AlignmentMask;
RealAllocationSize = AllocationSize + OverAllocationSize;
- if (RealAllocationSize <= AllocationSize ) {
- //
- // This extra checking is to make sure that AllocationSize plus OverAllocationSize does not overflow.
- //
- return NULL;
- }
+ //
+ // Make sure that AllocationSize plus OverAllocationSize does not overflow.
+ //
+ ASSERT (RealAllocationSize > AllocationSize);
+
RawAddress = InternalAllocatePool (PoolType, RealAllocationSize);
if (RawAddress == NULL) {
return NULL;
diff --git a/MdePkg/Library/PeiMemoryAllocationLib/MemoryAllocationLib.c b/MdePkg/Library/PeiMemoryAllocationLib/MemoryAllocationLib.c index 63641569ff..274287cf03 100644 --- a/MdePkg/Library/PeiMemoryAllocationLib/MemoryAllocationLib.c +++ b/MdePkg/Library/PeiMemoryAllocationLib/MemoryAllocationLib.c @@ -158,6 +158,10 @@ InternalAllocateAlignedPages ( return NULL;
}
//
+ // Make sure that Pages plus EFI_SIZE_TO_PAGES (Alignment) does not overflow.
+ //
+ ASSERT (Pages <= (MAX_ADDRESS - EFI_SIZE_TO_PAGES (Alignment)));
+ //
// We would rather waste some memory to save PEI code size.
//
Memory = InternalAllocatePages (MemoryType, Pages + EFI_SIZE_TO_PAGES (Alignment));
@@ -569,6 +573,10 @@ InternalAllocateAlignedPool ( } else {
AlignmentMask = Alignment - 1;
}
+ //
+ // Make sure that AllocationSize plus AlignmentMask does not overflow.
+ //
+ ASSERT (AllocationSize <= (MAX_ADDRESS - AlignmentMask));
RawAddress = InternalAllocatePool (PoolType, AllocationSize + AlignmentMask);
@@ -609,6 +617,11 @@ AllocateAlignedPool ( AlignmentMask = Alignment - 1;
}
+ //
+ // Make sure that AllocationSize plus AlignmentMask does not overflow.
+ //
+ ASSERT (AllocationSize <= (MAX_ADDRESS - AlignmentMask));
+
RawAddress = AllocatePool (AllocationSize + AlignmentMask);
AlignedAddress = ((UINTN) RawAddress + AlignmentMask) & ~AlignmentMask;
diff --git a/MdePkg/Library/UefiLib/Console.c b/MdePkg/Library/UefiLib/Console.c index d06b0a932d..4fbdef7350 100644 --- a/MdePkg/Library/UefiLib/Console.c +++ b/MdePkg/Library/UefiLib/Console.c @@ -263,6 +263,10 @@ UnicodeStringDisplayLength ( UINTN Length;
UINTN Width;
+ if (String == NULL) {
+ return 0;
+ }
+
Length = 0;
while (*String != 0) {
Width = GetGlyphWidth (*String);
|