GaugeEntryExArray[Index].Handle = (EFI_PHYSICAL_ADDRESS) (UINTN) Handle;\r
\r
if (Token != NULL) {\r
- AsciiStrCpyS (GaugeEntryExArray[Index].Token, SMM_PERFORMANCE_STRING_SIZE, Token);\r
+ AsciiStrnCpyS (GaugeEntryExArray[Index].Token, SMM_PERFORMANCE_STRING_SIZE, Token, SMM_PERFORMANCE_STRING_LENGTH);\r
}\r
if (Module != NULL) {\r
- AsciiStrCpyS (GaugeEntryExArray[Index].Module, SMM_PERFORMANCE_STRING_SIZE, Module);\r
+ AsciiStrnCpyS (GaugeEntryExArray[Index].Module, SMM_PERFORMANCE_STRING_SIZE, Module, SMM_PERFORMANCE_STRING_LENGTH);\r
}\r
\r
GaugeEntryExArray[Index].EndTimeStamp = 0;\r
EFI_STATUS Status;\r
SMM_PERF_COMMUNICATE_EX *SmmPerfCommData;\r
GAUGE_DATA_ENTRY_EX *GaugeEntryExArray;\r
- UINTN DataSize;\r
+ UINT64 DataSize;\r
+ UINTN Index;\r
GAUGE_DATA_ENTRY_EX *GaugeDataEx;\r
UINTN NumberOfEntries;\r
UINTN LogEntryKey;\r
NumberOfEntries = SmmPerfCommData->NumberOfEntries;\r
LogEntryKey = SmmPerfCommData->LogEntryKey;\r
if (GaugeDataEx == NULL || NumberOfEntries == 0 || LogEntryKey > mGaugeData->NumberOfEntries ||\r
- NumberOfEntries > mGaugeData->NumberOfEntries || (LogEntryKey + NumberOfEntries) > mGaugeData->NumberOfEntries) {\r
+ NumberOfEntries > mGaugeData->NumberOfEntries || LogEntryKey > (mGaugeData->NumberOfEntries - NumberOfEntries)) {\r
Status = EFI_INVALID_PARAMETER;\r
break;\r
}\r
//\r
// Sanity check\r
//\r
- DataSize = NumberOfEntries * sizeof(GAUGE_DATA_ENTRY_EX);\r
- if (!SmmIsBufferOutsideSmmValid ((UINTN)GaugeDataEx, DataSize)) {\r
+ DataSize = MultU64x32 (NumberOfEntries, sizeof(GAUGE_DATA_ENTRY_EX));\r
+ if (!SmmIsBufferOutsideSmmValid ((UINTN) GaugeDataEx, DataSize)) {\r
DEBUG ((EFI_D_ERROR, "SmmPerformanceHandlerEx: SMM Performance Data buffer in SMRAM or overflow!\n"));\r
Status = EFI_ACCESS_DENIED;\r
break;\r
}\r
\r
GaugeEntryExArray = (GAUGE_DATA_ENTRY_EX *) (mGaugeData + 1);\r
- CopyMem(\r
- (UINT8 *) GaugeDataEx,\r
- (UINT8 *) &GaugeEntryExArray[LogEntryKey],\r
- DataSize\r
- );\r
+\r
+ for (Index = 0; Index < NumberOfEntries; Index++) {\r
+ CopyMem (\r
+ (UINT8 *) &GaugeDataEx[Index],\r
+ (UINT8 *) &GaugeEntryExArray[LogEntryKey++],\r
+ sizeof (GAUGE_DATA_ENTRY_EX)\r
+ );\r
+ }\r
Status = EFI_SUCCESS;\r
break;\r
\r
EFI_STATUS Status;\r
SMM_PERF_COMMUNICATE *SmmPerfCommData;\r
GAUGE_DATA_ENTRY_EX *GaugeEntryExArray;\r
- UINTN DataSize;\r
+ UINT64 DataSize;\r
UINTN Index;\r
GAUGE_DATA_ENTRY *GaugeData;\r
UINTN NumberOfEntries;\r
NumberOfEntries = SmmPerfCommData->NumberOfEntries;\r
LogEntryKey = SmmPerfCommData->LogEntryKey;\r
if (GaugeData == NULL || NumberOfEntries == 0 || LogEntryKey > mGaugeData->NumberOfEntries ||\r
- NumberOfEntries > mGaugeData->NumberOfEntries || (LogEntryKey + NumberOfEntries) > mGaugeData->NumberOfEntries) {\r
+ NumberOfEntries > mGaugeData->NumberOfEntries || LogEntryKey > (mGaugeData->NumberOfEntries - NumberOfEntries)) {\r
Status = EFI_INVALID_PARAMETER;\r
break;\r
}\r
//\r
// Sanity check\r
//\r
- DataSize = NumberOfEntries * sizeof(GAUGE_DATA_ENTRY);\r
- if (!SmmIsBufferOutsideSmmValid ((UINTN)GaugeData, DataSize)) {\r
+ DataSize = MultU64x32 (NumberOfEntries, sizeof(GAUGE_DATA_ENTRY));\r
+ if (!SmmIsBufferOutsideSmmValid ((UINTN) GaugeData, DataSize)) {\r
DEBUG ((EFI_D_ERROR, "SmmPerformanceHandler: SMM Performance Data buffer in SMRAM or overflow!\n"));\r
Status = EFI_ACCESS_DENIED;\r
break;\r
GaugeEntryExArray = (GAUGE_DATA_ENTRY_EX *) (mGaugeData + 1);\r
\r
for (Index = 0; Index < NumberOfEntries; Index++) {\r
- CopyMem(\r
+ CopyMem (\r
(UINT8 *) &GaugeData[Index],\r
(UINT8 *) &GaugeEntryExArray[LogEntryKey++],\r
sizeof (GAUGE_DATA_ENTRY)\r