From: Ruiyu Ni Date: Tue, 9 Jan 2018 02:33:57 +0000 (+0800) Subject: UefiCpuPkg/MtrrLib: Handle one setting request covering all memory X-Git-Tag: edk2-stable201903~2641 X-Git-Url: https://git.proxmox.com/?a=commitdiff_plain;h=cee85c48e92be0cb1555f8ab6746cfd15891de2c;hp=ffb4c72d7b637d4ac377fc7da7575069f15c288e;p=mirror_edk2.git UefiCpuPkg/MtrrLib: Handle one setting request covering all memory *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 Reviewed-by: Eric Dong --- diff --git a/UefiCpuPkg/Library/MtrrLib/MtrrLib.c b/UefiCpuPkg/Library/MtrrLib/MtrrLib.c index 1f85ac7e65..333341f7be 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; }