*SetMemoryAttribute*() API cannot handle the setting request that
looks like <0, MAX_ADDRESS, Type>. The buggy parameter checking
logic returns Unsupported for this case.
The patch fixes the checking logic to handle such case.

Contributed-under: TianoCore Contribution Agreement 1.1
Signed-off-by: Ruiyu Ni <[email protected]>
Cc: Eric Dong <[email protected]>
Cc: Star Zeng <[email protected]>
---
 UefiCpuPkg/Library/MtrrLib/MtrrLib.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)

diff --git a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c 
b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c
index 566a4cb67b..54f703606b 100644
--- a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c
+++ b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c
@@ -2270,8 +2270,13 @@ MtrrSetMemoryAttributesInMtrrSettings (
       goto Exit;
     }
     if (((Ranges[Index].BaseAddress & ~MtrrValidAddressMask) != 0) ||
-        ((Ranges[Index].Length & ~MtrrValidAddressMask) != 0)
+        ((((Ranges[Index].BaseAddress + Ranges[Index].Length) & 
~MtrrValidAddressMask) != 0) &&
+          (Ranges[Index].BaseAddress + Ranges[Index].Length) != 
MtrrValidBitsMask + 1)
         ) {
+      //
+      // Either the BaseAddress or the Limit doesn't follow the alignment 
requirement.
+      // Note: It's still valid if Limit doesn't follow the alignment 
requirement but equals to MAX Address.
+      //
       Status = RETURN_UNSUPPORTED;
       goto Exit;
     }
-- 
2.15.1.windows.2

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

Reply via email to