*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 <ruiyu.ni@intel.com>
Reviewed-by: Eric Dong <eric.dong@intel.com>
goto Exit;\r
}\r
if (((Ranges[Index].BaseAddress & ~MtrrValidAddressMask) != 0) ||\r
goto Exit;\r
}\r
if (((Ranges[Index].BaseAddress & ~MtrrValidAddressMask) != 0) ||\r
- ((Ranges[Index].Length & ~MtrrValidAddressMask) != 0)\r
+ ((((Ranges[Index].BaseAddress + Ranges[Index].Length) & ~MtrrValidAddressMask) != 0) &&\r
+ (Ranges[Index].BaseAddress + Ranges[Index].Length) != MtrrValidBitsMask + 1)\r
+ //\r
+ // Either the BaseAddress or the Limit doesn't follow the alignment requirement.\r
+ // Note: It's still valid if Limit doesn't follow the alignment requirement but equals to MAX Address.\r
+ //\r
Status = RETURN_UNSUPPORTED;\r
goto Exit;\r
}\r
Status = RETURN_UNSUPPORTED;\r
goto Exit;\r
}\r