Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Qiu Shumin <shumin....@intel.com> --- MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c | 24 ++++++++++++++-------- .../Library/UefiBootManagerLib/BmPerformance.c | 20 ++++++++++-------- 2 files changed, 28 insertions(+), 16 deletions(-)
diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c index 2d3d57b..028edc3 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmBoot.c @@ -552,6 +552,7 @@ BmGetUsbDescription ( CHAR16 *SerialNumber; CHAR16 *Description; EFI_USB_DEVICE_DESCRIPTOR DevDesc; + UINTN DescMaxSize; Status = gBS->HandleProtocol ( Handle, @@ -606,15 +607,16 @@ BmGetUsbDescription ( return NULL; } - Description = AllocateZeroPool (StrSize (Manufacturer) + StrSize (Product) + StrSize (SerialNumber)); + DescMaxSize = StrSize (Manufacturer) + StrSize (Product) + StrSize (SerialNumber); + Description = AllocateZeroPool (DescMaxSize); ASSERT (Description != NULL); - StrCat (Description, Manufacturer); - StrCat (Description, L" "); + StrCatS (Description, DescMaxSize/sizeof(CHAR16), Manufacturer); + StrCatS (Description, DescMaxSize/sizeof(CHAR16), L" "); - StrCat (Description, Product); - StrCat (Description, L" "); + StrCatS (Description, DescMaxSize/sizeof(CHAR16), Product); + StrCatS (Description, DescMaxSize/sizeof(CHAR16), L" "); - StrCat (Description, SerialNumber); + StrCatS (Description, DescMaxSize/sizeof(CHAR16), SerialNumber); if (Manufacturer != &NullChar) { FreePool (Manufacturer); @@ -774,8 +776,14 @@ BmGetBootDescription ( // Temp = AllocatePool (StrSize (DefaultDescription) + sizeof (mBmUefiPrefix)); ASSERT (Temp != NULL); - StrCpy (Temp, mBmUefiPrefix); - StrCat (Temp, DefaultDescription); + StrCpyS ( Temp, + (StrSize (DefaultDescription) + sizeof (mBmUefiPrefix))/sizeof(CHAR16), + mBmUefiPrefix + ); + StrCatS ( Temp, + (StrSize (DefaultDescription) + sizeof (mBmUefiPrefix))/sizeof(CHAR16), + DefaultDescription + ); FreePool (DefaultDescription); DefaultDescription = Temp; break; diff --git a/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c b/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c index 32229d0..dd937a7 100644 --- a/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c +++ b/MdeModulePkg/Library/UefiBootManagerLib/BmPerformance.c @@ -26,12 +26,14 @@ EFI_PHYSICAL_ADDRESS mBmAcpiLowMemoryBase = 0x0FFFFFFFFULL; @param PdbFileName The long PDB file name. @param GaugeString The output string to be logged by performance logger. + @param StringSize The buffer size of GaugeString in bytes. **/ VOID BmGetShortPdbFileName ( IN CONST CHAR8 *PdbFileName, - OUT CHAR8 *GaugeString + OUT CHAR8 *GaugeString, + IN UINTN StringSize ) { UINTN Index; @@ -40,7 +42,7 @@ BmGetShortPdbFileName ( UINTN EndIndex; if (PdbFileName == NULL) { - AsciiStrCpy (GaugeString, " "); + AsciiStrCpyS (GaugeString, StringSize, " "); } else { StartIndex = 0; for (EndIndex = 0; PdbFileName[EndIndex] != 0; EndIndex++) @@ -78,12 +80,14 @@ BmGetShortPdbFileName ( @param Handle Driver handle. @param GaugeString The output string to be logged by performance logger. + @param StringSize The buffer size of GaugeString in bytes. **/ VOID BmGetNameFromHandle ( IN EFI_HANDLE Handle, - OUT CHAR8 *GaugeString + OUT CHAR8 *GaugeString, + IN UINTN StringSize ) { EFI_STATUS Status; @@ -91,7 +95,7 @@ BmGetNameFromHandle ( CHAR8 *PdbFileName; EFI_DRIVER_BINDING_PROTOCOL *DriverBinding; - AsciiStrCpy (GaugeString, " "); + AsciiStrCpyS (GaugeString, StringSize, " "); // // Get handle name from image protocol @@ -127,7 +131,7 @@ BmGetNameFromHandle ( PdbFileName = PeCoffLoaderGetPdbPointer (Image->ImageBase); if (PdbFileName != NULL) { - BmGetShortPdbFileName (PdbFileName, GaugeString); + BmGetShortPdbFileName (PdbFileName, GaugeString, StringSize); } return ; @@ -285,9 +289,9 @@ BmWriteBootToOsPerformanceData ( if (Duration > 0) { - BmGetNameFromHandle (Handles[Index], GaugeString); + BmGetNameFromHandle (Handles[Index], GaugeString, PERF_TOKEN_LENGTH); - AsciiStrCpy (mBmPerfData.Token, GaugeString); + AsciiStrCpyS (mBmPerfData.Token, PERF_TOKEN_SIZE, GaugeString); mBmPerfData.Duration = Duration; CopyMem (Ptr, &mBmPerfData, sizeof (PERF_DATA)); @@ -316,7 +320,7 @@ BmWriteBootToOsPerformanceData ( ZeroMem (&mBmPerfData, sizeof (PERF_DATA)); - AsciiStrnCpy (mBmPerfData.Token, Token, PERF_TOKEN_LENGTH); + AsciiStrCpyS (mBmPerfData.Token, PERF_TOKEN_SIZE, Token); if (StartTicker == 1) { StartTicker = StartValue; } -- 1.9.5.msysgit.1 ------------------------------------------------------------------------------ Monitor 25 network devices or servers for free with OpManager! OpManager is web-based network management software that monitors network devices and physical & virtual servers, alerts via email & sms for fault. Monitor 25 devices for free with no restriction. Download now http://ad.doubleclick.net/ddm/clk/292181274;119417398;o _______________________________________________ edk2-devel mailing list edk2-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/edk2-devel