MdePkg/UefiDevicePathLib: Add a checking step

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: Liming Gao <liming.gao@intel.com>
Cc: Michael D Kinney <michael.d.kinney@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>
Reviewed-by: Ruiyu Ni <ruiyu.ni@intel.com>
This commit is contained in:
Mike Turner 2018-12-11 14:14:10 +08:00 committed by Liming Gao
parent 3d086fed73
commit fd02394228
2 changed files with 10 additions and 10 deletions

View File

@ -22,12 +22,13 @@ WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED.
/** /**
Determine whether a given device path is valid. Determine whether a given device path is valid.
If DevicePath is NULL, then ASSERT().
@param DevicePath A pointer to a device path data structure. @param DevicePath A pointer to a device path data structure.
@param MaxSize The maximum size of the device path data structure. @param MaxSize The maximum size of the device path data structure.
@retval TRUE DevicePath is valid. @retval TRUE DevicePath is valid.
@retval FALSE DevicePath is NULL.
@retval FALSE Maxsize is less than sizeof(EFI_DEVICE_PATH_PROTOCOL).
@retval FALSE The length of any node node in the DevicePath is less @retval FALSE The length of any node node in the DevicePath is less
than sizeof (EFI_DEVICE_PATH_PROTOCOL). than sizeof (EFI_DEVICE_PATH_PROTOCOL).
@retval FALSE If MaxSize is not zero, the size of the DevicePath @retval FALSE If MaxSize is not zero, the size of the DevicePath

View File

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