MdeModulePkg/PerformanceLib: Add NULL pointer check
authorDandan Bi <dandan.bi@intel.com>
Wed, 27 Jun 2018 04:37:19 +0000 (12:37 +0800)
committerEric Dong <eric.dong@intel.com>
Thu, 28 Jun 2018 11:46:07 +0000 (19:46 +0800)
1. Add NULL pointer check for the "Guid" parameter
   when handle FPDT_DUAL_GUID_STRING_EVENT_TYPE.
2. Make the code logic in DxeCore/SmmCore/PeiPerformanceLib
   aligned when handle FPDT_DUAL_GUID_STRING_EVENT_TYPE.

Cc: Liming Gao <liming.gao@intel.com>
Cc: Hao Wu <hao.a.wu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Dandan Bi <dandan.bi@intel.com>
Reviewed-by: Hao Wu <hao.a.wu@intel.com>
MdeModulePkg/Library/DxeCorePerformanceLib/DxeCorePerformanceLib.c
MdeModulePkg/Library/PeiPerformanceLib/PeiPerformanceLib.c
MdeModulePkg/Library/SmmCorePerformanceLib/SmmCorePerformanceLib.c

index 57a14e8..5798c89 100644 (file)
@@ -1111,14 +1111,13 @@ InsertFpdtRecord (
   case PERF_EVENTSIGNAL_END_ID:\r
   case PERF_CALLBACK_START_ID:\r
   case PERF_CALLBACK_END_ID:\r
-    if (String == NULL) {\r
+    if (String == NULL || Guid == NULL) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
-    //\r
-    // Cache the event guid in string event record when PcdEdkiiFpdtStringRecordEnableOnly == TRUE\r
-    //\r
-    CopyGuid (&ModuleGuid, Guid);\r
     StringPtr = String;\r
+    if (AsciiStrLen (String) == 0) {\r
+      StringPtr = "unknown name";\r
+    }\r
     if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
       FpdtRecordPtr.DualGuidStringEvent->Header.Type      = FPDT_DUAL_GUID_STRING_EVENT_TYPE;\r
       FpdtRecordPtr.DualGuidStringEvent->Header.Length    = sizeof (FPDT_DUAL_GUID_STRING_EVENT_RECORD);\r
@@ -1196,7 +1195,14 @@ InsertFpdtRecord (
     FpdtRecordPtr.DynamicStringEvent->Header.Revision   = FPDT_RECORD_REVISION_1;\r
     FpdtRecordPtr.DynamicStringEvent->ProgressID        = PerfId;\r
     FpdtRecordPtr.DynamicStringEvent->Timestamp         = TimeStamp;\r
-    CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, &ModuleGuid, sizeof (FpdtRecordPtr.DynamicStringEvent->Guid));\r
+    if (Guid != NULL) {\r
+      //\r
+      // Cache the event guid in string event record.\r
+      //\r
+      CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, Guid, sizeof (FpdtRecordPtr.DynamicStringEvent->Guid));\r
+    } else {\r
+      CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, &ModuleGuid, sizeof (FpdtRecordPtr.DynamicStringEvent->Guid));\r
+    }\r
     if (AsciiStrLen (StringPtr) == 0) {\r
       StringPtr = "unknown name";\r
     }\r
index 8a65a2a..808a635 100644 (file)
@@ -77,10 +77,10 @@ GetFpdtRecordPtr (
     //\r
     PeiFirmwarePerformance  = (UINT8*)GET_GUID_HOB_DATA (GuidHob);\r
     *PeiPerformanceLogHeader = (FPDT_PEI_EXT_PERF_HEADER *)PeiFirmwarePerformance;\r
-    if (!(*PeiPerformanceLogHeader)->HobIsFull && (*PeiPerformanceLogHeader)->SizeOfAllEntries + RecordSize > (UINTN)(PeiPerformanceLogEntries * PEI_MAX_RECORD_SIZE)) {\r
+    if (!(*PeiPerformanceLogHeader)->HobIsFull && (*PeiPerformanceLogHeader)->SizeOfAllEntries + RecordSize > (PeiPerformanceLogEntries * PEI_MAX_RECORD_SIZE)) {\r
       (*PeiPerformanceLogHeader)->HobIsFull = TRUE;\r
     }\r
-    if (!(*PeiPerformanceLogHeader)->HobIsFull && (*PeiPerformanceLogHeader)->SizeOfAllEntries + RecordSize <= (UINTN)(PeiPerformanceLogEntries * PEI_MAX_RECORD_SIZE)) {\r
+    if (!(*PeiPerformanceLogHeader)->HobIsFull && (*PeiPerformanceLogHeader)->SizeOfAllEntries + RecordSize <= (PeiPerformanceLogEntries * PEI_MAX_RECORD_SIZE)) {\r
       FpdtRecordPtr->RecordHeader = (EFI_ACPI_5_0_FPDT_PERFORMANCE_RECORD_HEADER *)(PeiFirmwarePerformance + sizeof (FPDT_PEI_EXT_PERF_HEADER) + (*PeiPerformanceLogHeader)->SizeOfAllEntries);\r
       break;\r
     }\r
@@ -423,9 +423,11 @@ InsertFpdtRecord (
   case PERF_EVENTSIGNAL_END_ID:\r
   case PERF_CALLBACK_START_ID:\r
   case PERF_CALLBACK_END_ID:\r
-    if (String != NULL && AsciiStrLen (String) != 0) {\r
-      StringPtr = String;\r
-    } else {\r
+    if (String == NULL || Guid == NULL) {\r
+      return EFI_INVALID_PARAMETER;\r
+    }\r
+    StringPtr = String;\r
+    if (AsciiStrLen (String) == 0) {\r
       StringPtr = "unknown name";\r
     }\r
     if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
@@ -436,6 +438,7 @@ InsertFpdtRecord (
       FpdtRecordPtr.DualGuidStringEvent->Timestamp        = TimeStamp;\r
       CopyMem (&FpdtRecordPtr.DualGuidStringEvent->Guid1, ModuleGuid, sizeof (FpdtRecordPtr.DualGuidStringEvent->Guid1));\r
       CopyMem (&FpdtRecordPtr.DualGuidStringEvent->Guid2, Guid, sizeof (FpdtRecordPtr.DualGuidStringEvent->Guid2));\r
+      CopyStringIntoPerfRecordAndUpdateLength (FpdtRecordPtr.DualGuidStringEvent->String, StringPtr, &FpdtRecordPtr.DualGuidStringEvent->Header.Length);\r
     }\r
     break;\r
 \r
index 0c00fb5..f18c3fb 100644 (file)
@@ -649,14 +649,13 @@ InsertFpdtRecord (
   case PERF_EVENTSIGNAL_END_ID:\r
   case PERF_CALLBACK_START_ID:\r
   case PERF_CALLBACK_END_ID:\r
-    if (String == NULL) {\r
+    if (String == NULL || Guid == NULL) {\r
       return EFI_INVALID_PARAMETER;\r
     }\r
-    //\r
-    // Cache the event guid in string event record when PcdEdkiiFpdtStringRecordEnableOnly == TRUE\r
-    //\r
-    CopyGuid (&ModuleGuid, Guid);\r
     StringPtr = String;\r
+    if (AsciiStrLen (String) == 0) {\r
+      StringPtr = "unknown name";\r
+    }\r
     if (!PcdGetBool (PcdEdkiiFpdtStringRecordEnableOnly)) {\r
       FpdtRecordPtr.DualGuidStringEvent->Header.Type      = FPDT_DUAL_GUID_STRING_EVENT_TYPE;\r
       FpdtRecordPtr.DualGuidStringEvent->Header.Length    = sizeof (FPDT_DUAL_GUID_STRING_EVENT_RECORD);\r
@@ -734,7 +733,14 @@ InsertFpdtRecord (
     FpdtRecordPtr.DynamicStringEvent->Header.Revision   = FPDT_RECORD_REVISION_1;\r
     FpdtRecordPtr.DynamicStringEvent->ProgressID        = PerfId;\r
     FpdtRecordPtr.DynamicStringEvent->Timestamp         = TimeStamp;\r
-    CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, &ModuleGuid, sizeof (FpdtRecordPtr.DynamicStringEvent->Guid));\r
+    if (Guid != NULL) {\r
+      //\r
+      // Cache the event guid in string event record.\r
+      //\r
+      CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, Guid, sizeof (FpdtRecordPtr.DynamicStringEvent->Guid));\r
+    } else {\r
+      CopyMem (&FpdtRecordPtr.DynamicStringEvent->Guid, &ModuleGuid, sizeof (FpdtRecordPtr.DynamicStringEvent->Guid));\r
+    }\r
     if (AsciiStrLen (StringPtr) == 0) {\r
       StringPtr = "unknown name";\r
     }\r