From 1420143f014a4c14bd7cb430aaacd6b2c4bc8043 Mon Sep 17 00:00:00 2001 From: Eric Dong Date: Thu, 27 Oct 2016 11:05:51 +0800 Subject: [PATCH] MdePkg DevicePathLib: Rollback former change. Former patch still has some bugs, so rollback it and enhance the original code. Cc: Ruiyu NI Contributed-under: TianoCore Contribution Agreement 1.0 Signed-off-by: Eric Dong Reviewed-by: Jiewen Yao --- .../UefiDevicePathLib.c | 22 +++++-------------- 1 file changed, 6 insertions(+), 16 deletions(-) diff --git a/MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLib.c b/MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLib.c index 48724160d4..a514f1b6f9 100644 --- a/MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLib.c +++ b/MdePkg/Library/UefiDevicePathLibDevicePathProtocol/UefiDevicePathLib.c @@ -103,35 +103,25 @@ IsDevicePathValid ( ASSERT (DevicePath != NULL); - if (MaxSize == 0){ - MaxSize = MAX_UINTN; - } - - Size = 0; - Count = 0; - - while (MaxSize >= sizeof (EFI_DEVICE_PATH_PROTOCOL) && - (MaxSize - sizeof (EFI_DEVICE_PATH_PROTOCOL) >= Size) && - !IsDevicePathEnd (DevicePath)) { + for (Count = 0, Size = 0; !IsDevicePathEnd (DevicePath); DevicePath = NextDevicePathNode (DevicePath)) { NodeLength = DevicePathNodeLength (DevicePath); if (NodeLength < sizeof (EFI_DEVICE_PATH_PROTOCOL)) { return FALSE; } - if (NodeLength > MAX_UINTN - Size) { - return FALSE; + if (MaxSize > 0) { + Size += NodeLength; + if (Size + END_DEVICE_PATH_LENGTH > MaxSize) { + return FALSE; + } } - Size += NodeLength; - if (PcdGet32 (PcdMaximumDevicePathNodeCount) > 0) { Count++; if (Count >= PcdGet32 (PcdMaximumDevicePathNodeCount)) { return FALSE; } } - - DevicePath = NextDevicePathNode (DevicePath); } // -- 2.39.2