]> git.proxmox.com Git - mirror_edk2.git/commitdiff
BaseTools/DevicePath: Add a checking step
authorMike Turner <miketur@microsoft.com>
Tue, 11 Dec 2018 06:10:33 +0000 (14:10 +0800)
committerLiming Gao <liming.gao@intel.com>
Thu, 31 Jan 2019 12:19:22 +0000 (20:19 +0800)
Add a checking step in DevicePathUtilities.c
to verify DevicePath.
https://bugzilla.tianocore.org/show_bug.cgi?id=1372

v2: Remove ASSERT() and the redundant checking step.
    Update related description.

Cc: Bob Feng <bob.c.feng@intel.com>
Cc: Liming Gao <liming.gao@intel.com>
Cc: Yonghong Zhu <yonghong.zhu@intel.com>
Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Shenglei Zhang <shenglei.zhang@intel.com>
Reviewed-by: Liming Gao <liming.gao@intel.com>
BaseTools/Source/C/DevicePath/DevicePathUtilities.c

index f8a41ff97dd8cf284d30f85d2a002ef05772fc4c..3b3abc67eabb8456ede75e8cea60420346a3067b 100644 (file)
@@ -36,12 +36,13 @@ CONST EFI_DEVICE_PATH_PROTOCOL  mUefiDevicePathLibEndDevicePath = {
 \r
 /**\r
   Determine whether a given device path is valid.\r
-  If DevicePath is NULL, then ASSERT().\r
 \r
   @param  DevicePath  A pointer to a device path data structure.\r
   @param  MaxSize     The maximum size of the device path data structure.\r
 \r
   @retval TRUE        DevicePath is valid.\r
+  @retval FALSE       DevicePath is NULL.\r
+  @retval FALSE       Maxsize is less than sizeof(EFI_DEVICE_PATH_PROTOCOL).\r
   @retval FALSE       The length of any node node in the DevicePath is less\r
                       than sizeof (EFI_DEVICE_PATH_PROTOCOL).\r
   @retval FALSE       If MaxSize is not zero, the size of the DevicePath\r
@@ -59,19 +60,17 @@ IsDevicePathValid (
   UINTN Size;\r
   UINTN NodeLength;\r
 \r
-  ASSERT (DevicePath != NULL);\r
-\r
-  if (MaxSize == 0) {\r
-    MaxSize = MAX_UINT32;\r
- }\r
-\r
   //\r
-  // Validate the input size big enough to touch the first node.\r
+  //  Validate the input whether exists and its size big enough to touch the first node\r
   //\r
-  if (MaxSize < sizeof (EFI_DEVICE_PATH_PROTOCOL)) {\r
+  if (DevicePath == NULL || (MaxSize > 0 && MaxSize < END_DEVICE_PATH_LENGTH)) {\r
     return FALSE;\r
   }\r
 \r
+  if (MaxSize == 0) {\r
+    MaxSize = MAX_UINT32;\r
+  }\r
+\r
   for (Count = 0, Size = 0; !IsDevicePathEnd (DevicePath); DevicePath = NextDevicePathNode (DevicePath)) {\r
     NodeLength = DevicePathNodeLength (DevicePath);\r
     if (NodeLength < sizeof (EFI_DEVICE_PATH_PROTOCOL)) {\r