Thanks for fixing the check.
PCI_ROOT_BRIDGE_APERTURE.Base/Limit are device address while the memory space
in GCD belongs to host domain.
So, host address for Mem/Pmem should be below 4GB while device address can
across
4GB.
Can you enhance the check as below?
ASSERT (TO_HOST_ADDRESS (Bridge->Mem.Limit, Bridge->Mem.Translation) <
SIZE_4GB);
if (TO_HOST_ADDRESS (Bridge->Mem.Limit, Bridge->Mem.Translation) >= SIZE_4GB)
{
return NULL;
}
It will look more precise and can detect invalid Mem/Pmem resource.
> -----Original Message-----
> From: Wasim Khan <[email protected]>
> Sent: Thursday, April 23, 2020 6:44 PM
> To: [email protected]
> Cc: [email protected]; [email protected]; Wu, Hao A
> <[email protected]>; Ni, Ray <[email protected]>; Wasim
> Khan <[email protected]>
> Subject: [PATCH] MdeModulePkg/PciHostBridge: Update Mem and PMem Limit Checks
>
> With Address Translation Support, it is possible and
> also correct that Mem and Pmem Limit cross the 4GB boundary.
> Update the checks so that Mem/PMem Limit should not cross 4GB
> from the Mem/PMem Base address.
>
> Signed-off-by: Wasim Khan <[email protected]>
> ---
> MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c
> b/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c
> index d304fae..9cf7e98 100644
> --- a/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c
> +++ b/MdeModulePkg/Bus/Pci/PciHostBridgeDxe/PciRootBridgeIo.c
> @@ -117,8 +117,8 @@ CreateRootBridge (
> // Make sure Mem and MemAbove4G apertures are valid
> //
> if (RESOURCE_VALID (&Bridge->Mem)) {
> - ASSERT (Bridge->Mem.Limit < SIZE_4GB);
> - if (Bridge->Mem.Limit >= SIZE_4GB) {
> + ASSERT (Bridge->Mem.Limit < (Bridge->Mem.Base + SIZE_4GB));
> + if (Bridge->Mem.Limit >= (Bridge->Mem.Base + SIZE_4GB)) {
> return NULL;
> }
> }
> @@ -129,8 +129,8 @@ CreateRootBridge (
> }
> }
> if (RESOURCE_VALID (&Bridge->PMem)) {
> - ASSERT (Bridge->PMem.Limit < SIZE_4GB);
> - if (Bridge->PMem.Limit >= SIZE_4GB) {
> + ASSERT (Bridge->PMem.Limit < (Bridge->PMem.Base + SIZE_4GB));
> + if (Bridge->PMem.Limit >= (Bridge->PMem.Base + SIZE_4GB)) {
> return NULL;
> }
> }
> --
> 2.7.4
-=-=-=-=-=-=-=-=-=-=-=-
Groups.io Links: You receive all messages sent to this group.
View/Reply Online (#57959): https://edk2.groups.io/g/devel/message/57959
Mute This Topic: https://groups.io/mt/73215737/21656
Group Owner: [email protected]
Unsubscribe: https://edk2.groups.io/g/devel/unsub [[email protected]]
-=-=-=-=-=-=-=-=-=-=-=-