+    CopyMem (WiFiDp->SSId, AsciiStr, sizeof (WiFiDp->SSId));

This would bring issue if the AsciiStr is less than 32 characters as you will 
copy some rubbish value to SSId.

And what if the passing string of SSID is invalid, for example, the length is 
larger than 32? Shall we return NULL or the first 32bytes?

Thanks
Feng 

-----Original Message-----
From: Wu, Hao A 
Sent: Thursday, August 27, 2015 8:23 PM
To: [email protected]; Tian, Feng; Gao, Liming
Cc: Wu, Hao A
Subject: [PATCH v2 2/2] MdePkg UefiDevicePathLib: Fix possible memory 
read/write cross boundary

The SSID field of a Wi-Fi device path node may not contain a NULL termination.

Additonal handle is added to make sure no cross-boundary memory read/write will 
occur.

Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Hao Wu <[email protected]>
---
 MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c |  9 +++++++--
 MdePkg/Library/UefiDevicePathLib/DevicePathToText.c   | 11 ++++++++++-
 2 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c 
b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
index 10ba6a4..e0c2dfe 100644
--- a/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
+++ b/MdePkg/Library/UefiDevicePathLib/DevicePathFromText.c
@@ -2836,8 +2836,13 @@ DevPathFromTextWiFi (
                                    (UINT16) sizeof (WIFI_DEVICE_PATH)
                                    );
 
-  AsciiStr = (CHAR8 *) WiFiDp->SSId;
-  StrToAscii (SSIdStr, &AsciiStr);
+  if (NULL != SSIdStr) {
+    AsciiStr = AllocateZeroPool (StrLen (SSIdStr) + 1);
+
+    UnicodeStrToAsciiStr (SSIdStr, AsciiStr);
+    CopyMem (WiFiDp->SSId, AsciiStr, sizeof (WiFiDp->SSId));
+    FreePool (AsciiStr);
+  }
 
   return (EFI_DEVICE_PATH_PROTOCOL *) WiFiDp;  } diff --git 
a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c 
b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
index 20d8812..abf4dfb 100644
--- a/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
+++ b/MdePkg/Library/UefiDevicePathLib/DevicePathToText.c
@@ -1616,9 +1616,18 @@ DevPathToTextWiFi (
   )
 {
   WIFI_DEVICE_PATH      *WiFi;
+  UINT8                 SSId[33];
 
   WiFi = DevPath;
-  UefiDevicePathLibCatPrint (Str, L"Wi-Fi(%a)", WiFi->SSId);
+
+  AsciiStrnCpyS (
+    (CHAR8 *)SSId, 
+    sizeof (SSId) / sizeof (SSId[0]),
+    (CHAR8 *)WiFi->SSId,
+    sizeof (SSId) / sizeof (SSId[0]) - 1
+    );
+
+  UefiDevicePathLibCatPrint (Str, L"Wi-Fi(%a)", SSId);
 }
 
 /**
--
1.9.5.msysgit.0

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to