Re: [edk2] [PATCH 3/3] MdeModulePkg/NonDiscoverablePciDeviceDxe: add missing validation
Push @ c8c3c53669bea887ecc093167d64d1fbe63c213f Regards, Jian > -Original Message- > From: Leif Lindholm [mailto:leif.lindh...@linaro.org] > Sent: Saturday, December 15, 2018 9:37 PM > To: Ard Biesheuvel > Cc: Vladimir Olovyannikov ; Zeng, Star > ; edk2-devel@lists.01.org; Ni, Ruiyu > ; Wang, Jian J ; Wu, Hao A > > Subject: Re: [PATCH 3/3] MdeModulePkg/NonDiscoverablePciDeviceDxe: add > missing validation > > Jian, Hao, > > I guess Ray and Star are no longer maintainers of this package. > This patch never got pushed - could you have a look please? > > Regards, > > Leif > > On Fri, Sep 07, 2018 at 12:36:32PM +0200, Ard Biesheuvel wrote: > > On 6 September 2018 at 20:55, Vladimir Olovyannikov > > wrote: > > > UEFI SCT crashed and failed in NonDiscoverablePciDeviceDxe becase > > > required checks were not performed. Perform parameters validation in > > > NonDiscoverablePciDeviceDxe. > > > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > > Signed-off-by: Vladimir Olovyannikov > > > > > Reviewed-by: Ard Biesheuvel > > > > > --- > > > .../NonDiscoverablePciDeviceIo.c | 50 ++- > > > 1 file changed, 49 insertions(+), 1 deletion(-) > > > > > > diff --git > a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciD > eviceIo.c > b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciD > eviceIo.c > > > index 0e42ae4bf6ec..07118d59fd68 100644 > > > --- > a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciD > eviceIo.c > > > +++ > b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciD > eviceIo.c > > > @@ -52,6 +52,10 @@ GetBarResource ( > > > > > >BarIndex -= (UINT8)Dev->BarOffset; > > > > > > + if (BarIndex >= Dev->BarCount) { > > > +return EFI_UNSUPPORTED; > > > + } > > > + > > >for (Desc = Dev->Device->Resources; > > > Desc->Desc != ACPI_END_TAG_DESCRIPTOR; > > > Desc = (VOID *)((UINT8 *)Desc + Desc->Len + 3)) { > > > @@ -597,6 +601,19 @@ CoherentPciIoMap ( > > >EFI_STATUSStatus; > > >NON_DISCOVERABLE_PCI_DEVICE_MAP_INFO *MapInfo; > > > > > > + if (Operation != EfiPciIoOperationBusMasterRead && > > > + Operation != EfiPciIoOperationBusMasterWrite && > > > + Operation != EfiPciIoOperationBusMasterCommonBuffer) { > > > +return EFI_INVALID_PARAMETER; > > > + } > > > + > > > + if (HostAddress == NULL || > > > + NumberOfBytes == NULL || > > > + DeviceAddress == NULL || > > > + Mapping == NULL) { > > > +return EFI_INVALID_PARAMETER; > > > + } > > > + > > >// > > >// If HostAddress exceeds 4 GB, and this device does not support 64-bit > DMA > > >// addressing, we need to allocate a bounce buffer and copy over the > > > data. > > > @@ -720,6 +737,11 @@ CoherentPciIoAllocateBuffer ( > > > return EFI_UNSUPPORTED; > > >} > > > > > > + if ((MemoryType != EfiBootServicesData) && > > > + (MemoryType != EfiRuntimeServicesData)) { > > > +return EFI_INVALID_PARAMETER; > > > + } > > > + > > >// > > >// Allocate below 4 GB if the dual address cycle attribute has not > > >// been set. If the system has no memory available below 4 GB, there > > > @@ -877,6 +899,10 @@ NonCoherentPciIoAllocateBuffer ( > > >NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION *Alloc; > > >VOID*AllocAddress; > > > > > > + if (HostAddress == NULL) { > > > +return EFI_INVALID_PARAMETER; > > > + } > > > + > > >Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This); > > > > > >Status = CoherentPciIoAllocateBuffer (This, Type, MemoryType, Pages, > > > @@ -995,6 +1021,19 @@ NonCoherentPciIoMap ( > > >EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor; > > >BOOLEAN Bounce; > > > > > > + if (HostAddress == NULL || > > > + NumberOfBytes == NULL || > > > + DeviceAddress == NULL || > > > + Mapping == NULL) { > > > +return EFI_INVALID_PARAMETER; > > > + } > > > + > > > + if (Operation != EfiPciIoOperationBusMasterRead && > > > + Operation != EfiPciIoOperationBusMasterWrite && > > > + Operation != EfiPciIoOperationBusMasterCommonBuffer) { > > > +return EFI_INVALID_PARAMETER; > > > + } > > > + > > >MapInfo = AllocatePool (sizeof *MapInfo); > > >if (MapInfo == NULL) { > > > return EFI_OUT_OF_RESOURCES; > > > @@ -1228,8 +1267,17 @@ PciIoAttributes ( > > >NON_DISCOVERABLE_PCI_DEVICE *Dev; > > >BOOLEAN Enable; > > > > > > + #define DEV_SUPPORTED_ATTRIBUTES \ > > > +(EFI_PCI_DEVICE_ENABLE | > EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE) > > > + > > >Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This); > > > > > > + if (Attributes) { > > > + if ((Attributes & (~(DEV_SUPPORTED_ATTRIBUTES))) != 0) { > > > +return EFI_UNSUPPORTED; > > > + } > > > +} > > > + > > >Enable = FALSE; > > >swit
Re: [edk2] [PATCH 3/3] MdeModulePkg/NonDiscoverablePciDeviceDxe: add missing validation
Leif, Thanks for reminding. I'll take care of it. Regards, Jian > -Original Message- > From: Leif Lindholm [mailto:leif.lindh...@linaro.org] > Sent: Saturday, December 15, 2018 9:37 PM > To: Ard Biesheuvel > Cc: Vladimir Olovyannikov ; Zeng, Star > ; edk2-devel@lists.01.org; Ni, Ruiyu > ; Wang, Jian J ; Wu, Hao A > > Subject: Re: [PATCH 3/3] MdeModulePkg/NonDiscoverablePciDeviceDxe: add > missing validation > > Jian, Hao, > > I guess Ray and Star are no longer maintainers of this package. > This patch never got pushed - could you have a look please? > > Regards, > > Leif > > On Fri, Sep 07, 2018 at 12:36:32PM +0200, Ard Biesheuvel wrote: > > On 6 September 2018 at 20:55, Vladimir Olovyannikov > > wrote: > > > UEFI SCT crashed and failed in NonDiscoverablePciDeviceDxe becase > > > required checks were not performed. Perform parameters validation in > > > NonDiscoverablePciDeviceDxe. > > > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > > Signed-off-by: Vladimir Olovyannikov > > > > > Reviewed-by: Ard Biesheuvel > > > > > --- > > > .../NonDiscoverablePciDeviceIo.c | 50 ++- > > > 1 file changed, 49 insertions(+), 1 deletion(-) > > > > > > diff --git > a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciD > eviceIo.c > b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciD > eviceIo.c > > > index 0e42ae4bf6ec..07118d59fd68 100644 > > > --- > a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciD > eviceIo.c > > > +++ > b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciD > eviceIo.c > > > @@ -52,6 +52,10 @@ GetBarResource ( > > > > > >BarIndex -= (UINT8)Dev->BarOffset; > > > > > > + if (BarIndex >= Dev->BarCount) { > > > +return EFI_UNSUPPORTED; > > > + } > > > + > > >for (Desc = Dev->Device->Resources; > > > Desc->Desc != ACPI_END_TAG_DESCRIPTOR; > > > Desc = (VOID *)((UINT8 *)Desc + Desc->Len + 3)) { > > > @@ -597,6 +601,19 @@ CoherentPciIoMap ( > > >EFI_STATUSStatus; > > >NON_DISCOVERABLE_PCI_DEVICE_MAP_INFO *MapInfo; > > > > > > + if (Operation != EfiPciIoOperationBusMasterRead && > > > + Operation != EfiPciIoOperationBusMasterWrite && > > > + Operation != EfiPciIoOperationBusMasterCommonBuffer) { > > > +return EFI_INVALID_PARAMETER; > > > + } > > > + > > > + if (HostAddress == NULL || > > > + NumberOfBytes == NULL || > > > + DeviceAddress == NULL || > > > + Mapping == NULL) { > > > +return EFI_INVALID_PARAMETER; > > > + } > > > + > > >// > > >// If HostAddress exceeds 4 GB, and this device does not support 64-bit > DMA > > >// addressing, we need to allocate a bounce buffer and copy over the > > > data. > > > @@ -720,6 +737,11 @@ CoherentPciIoAllocateBuffer ( > > > return EFI_UNSUPPORTED; > > >} > > > > > > + if ((MemoryType != EfiBootServicesData) && > > > + (MemoryType != EfiRuntimeServicesData)) { > > > +return EFI_INVALID_PARAMETER; > > > + } > > > + > > >// > > >// Allocate below 4 GB if the dual address cycle attribute has not > > >// been set. If the system has no memory available below 4 GB, there > > > @@ -877,6 +899,10 @@ NonCoherentPciIoAllocateBuffer ( > > >NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION *Alloc; > > >VOID*AllocAddress; > > > > > > + if (HostAddress == NULL) { > > > +return EFI_INVALID_PARAMETER; > > > + } > > > + > > >Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This); > > > > > >Status = CoherentPciIoAllocateBuffer (This, Type, MemoryType, Pages, > > > @@ -995,6 +1021,19 @@ NonCoherentPciIoMap ( > > >EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor; > > >BOOLEAN Bounce; > > > > > > + if (HostAddress == NULL || > > > + NumberOfBytes == NULL || > > > + DeviceAddress == NULL || > > > + Mapping == NULL) { > > > +return EFI_INVALID_PARAMETER; > > > + } > > > + > > > + if (Operation != EfiPciIoOperationBusMasterRead && > > > + Operation != EfiPciIoOperationBusMasterWrite && > > > + Operation != EfiPciIoOperationBusMasterCommonBuffer) { > > > +return EFI_INVALID_PARAMETER; > > > + } > > > + > > >MapInfo = AllocatePool (sizeof *MapInfo); > > >if (MapInfo == NULL) { > > > return EFI_OUT_OF_RESOURCES; > > > @@ -1228,8 +1267,17 @@ PciIoAttributes ( > > >NON_DISCOVERABLE_PCI_DEVICE *Dev; > > >BOOLEAN Enable; > > > > > > + #define DEV_SUPPORTED_ATTRIBUTES \ > > > +(EFI_PCI_DEVICE_ENABLE | > EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE) > > > + > > >Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This); > > > > > > + if (Attributes) { > > > + if ((Attributes & (~(DEV_SUPPORTED_ATTRIBUTES))) != 0) { > > > +return EFI_UNSUPPORTED; > > > + } > > > +} > > > + > > >Enable = FALSE; > > >
Re: [edk2] [PATCH 3/3] MdeModulePkg/NonDiscoverablePciDeviceDxe: add missing validation
Jian, Hao, I guess Ray and Star are no longer maintainers of this package. This patch never got pushed - could you have a look please? Regards, Leif On Fri, Sep 07, 2018 at 12:36:32PM +0200, Ard Biesheuvel wrote: > On 6 September 2018 at 20:55, Vladimir Olovyannikov > wrote: > > UEFI SCT crashed and failed in NonDiscoverablePciDeviceDxe becase > > required checks were not performed. Perform parameters validation in > > NonDiscoverablePciDeviceDxe. > > > > Contributed-under: TianoCore Contribution Agreement 1.1 > > Signed-off-by: Vladimir Olovyannikov > > Reviewed-by: Ard Biesheuvel > > > --- > > .../NonDiscoverablePciDeviceIo.c | 50 ++- > > 1 file changed, 49 insertions(+), 1 deletion(-) > > > > diff --git > > a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c > > > > b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c > > index 0e42ae4bf6ec..07118d59fd68 100644 > > --- > > a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c > > +++ > > b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c > > @@ -52,6 +52,10 @@ GetBarResource ( > > > >BarIndex -= (UINT8)Dev->BarOffset; > > > > + if (BarIndex >= Dev->BarCount) { > > +return EFI_UNSUPPORTED; > > + } > > + > >for (Desc = Dev->Device->Resources; > > Desc->Desc != ACPI_END_TAG_DESCRIPTOR; > > Desc = (VOID *)((UINT8 *)Desc + Desc->Len + 3)) { > > @@ -597,6 +601,19 @@ CoherentPciIoMap ( > >EFI_STATUSStatus; > >NON_DISCOVERABLE_PCI_DEVICE_MAP_INFO *MapInfo; > > > > + if (Operation != EfiPciIoOperationBusMasterRead && > > + Operation != EfiPciIoOperationBusMasterWrite && > > + Operation != EfiPciIoOperationBusMasterCommonBuffer) { > > +return EFI_INVALID_PARAMETER; > > + } > > + > > + if (HostAddress == NULL || > > + NumberOfBytes == NULL || > > + DeviceAddress == NULL || > > + Mapping == NULL) { > > +return EFI_INVALID_PARAMETER; > > + } > > + > >// > >// If HostAddress exceeds 4 GB, and this device does not support 64-bit > > DMA > >// addressing, we need to allocate a bounce buffer and copy over the > > data. > > @@ -720,6 +737,11 @@ CoherentPciIoAllocateBuffer ( > > return EFI_UNSUPPORTED; > >} > > > > + if ((MemoryType != EfiBootServicesData) && > > + (MemoryType != EfiRuntimeServicesData)) { > > +return EFI_INVALID_PARAMETER; > > + } > > + > >// > >// Allocate below 4 GB if the dual address cycle attribute has not > >// been set. If the system has no memory available below 4 GB, there > > @@ -877,6 +899,10 @@ NonCoherentPciIoAllocateBuffer ( > >NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION *Alloc; > >VOID*AllocAddress; > > > > + if (HostAddress == NULL) { > > +return EFI_INVALID_PARAMETER; > > + } > > + > >Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This); > > > >Status = CoherentPciIoAllocateBuffer (This, Type, MemoryType, Pages, > > @@ -995,6 +1021,19 @@ NonCoherentPciIoMap ( > >EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor; > >BOOLEAN Bounce; > > > > + if (HostAddress == NULL || > > + NumberOfBytes == NULL || > > + DeviceAddress == NULL || > > + Mapping == NULL) { > > +return EFI_INVALID_PARAMETER; > > + } > > + > > + if (Operation != EfiPciIoOperationBusMasterRead && > > + Operation != EfiPciIoOperationBusMasterWrite && > > + Operation != EfiPciIoOperationBusMasterCommonBuffer) { > > +return EFI_INVALID_PARAMETER; > > + } > > + > >MapInfo = AllocatePool (sizeof *MapInfo); > >if (MapInfo == NULL) { > > return EFI_OUT_OF_RESOURCES; > > @@ -1228,8 +1267,17 @@ PciIoAttributes ( > >NON_DISCOVERABLE_PCI_DEVICE *Dev; > >BOOLEAN Enable; > > > > + #define DEV_SUPPORTED_ATTRIBUTES \ > > +(EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE) > > + > >Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This); > > > > + if (Attributes) { > > + if ((Attributes & (~(DEV_SUPPORTED_ATTRIBUTES))) != 0) { > > +return EFI_UNSUPPORTED; > > + } > > +} > > + > >Enable = FALSE; > >switch (Operation) { > >case EfiPciIoAttributeOperationGet: > > @@ -1243,7 +1291,7 @@ PciIoAttributes ( > > if (Result == NULL) { > >return EFI_INVALID_PARAMETER; > > } > > -*Result = EFI_PCI_DEVICE_ENABLE | > > EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE; > > +*Result = DEV_SUPPORTED_ATTRIBUTES; > > break; > > > >case EfiPciIoAttributeOperationEnable: > > -- > > 2.18.0 > > ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
Re: [edk2] [PATCH 3/3] MdeModulePkg/NonDiscoverablePciDeviceDxe: add missing validation
On 6 September 2018 at 20:55, Vladimir Olovyannikov wrote: > UEFI SCT crashed and failed in NonDiscoverablePciDeviceDxe becase > required checks were not performed. Perform parameters validation in > NonDiscoverablePciDeviceDxe. > > Contributed-under: TianoCore Contribution Agreement 1.1 > Signed-off-by: Vladimir Olovyannikov Reviewed-by: Ard Biesheuvel > --- > .../NonDiscoverablePciDeviceIo.c | 50 ++- > 1 file changed, 49 insertions(+), 1 deletion(-) > > diff --git > a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c > > b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c > index 0e42ae4bf6ec..07118d59fd68 100644 > --- > a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c > +++ > b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c > @@ -52,6 +52,10 @@ GetBarResource ( > >BarIndex -= (UINT8)Dev->BarOffset; > > + if (BarIndex >= Dev->BarCount) { > +return EFI_UNSUPPORTED; > + } > + >for (Desc = Dev->Device->Resources; > Desc->Desc != ACPI_END_TAG_DESCRIPTOR; > Desc = (VOID *)((UINT8 *)Desc + Desc->Len + 3)) { > @@ -597,6 +601,19 @@ CoherentPciIoMap ( >EFI_STATUSStatus; >NON_DISCOVERABLE_PCI_DEVICE_MAP_INFO *MapInfo; > > + if (Operation != EfiPciIoOperationBusMasterRead && > + Operation != EfiPciIoOperationBusMasterWrite && > + Operation != EfiPciIoOperationBusMasterCommonBuffer) { > +return EFI_INVALID_PARAMETER; > + } > + > + if (HostAddress == NULL || > + NumberOfBytes == NULL || > + DeviceAddress == NULL || > + Mapping == NULL) { > +return EFI_INVALID_PARAMETER; > + } > + >// >// If HostAddress exceeds 4 GB, and this device does not support 64-bit DMA >// addressing, we need to allocate a bounce buffer and copy over the data. > @@ -720,6 +737,11 @@ CoherentPciIoAllocateBuffer ( > return EFI_UNSUPPORTED; >} > > + if ((MemoryType != EfiBootServicesData) && > + (MemoryType != EfiRuntimeServicesData)) { > +return EFI_INVALID_PARAMETER; > + } > + >// >// Allocate below 4 GB if the dual address cycle attribute has not >// been set. If the system has no memory available below 4 GB, there > @@ -877,6 +899,10 @@ NonCoherentPciIoAllocateBuffer ( >NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION *Alloc; >VOID*AllocAddress; > > + if (HostAddress == NULL) { > +return EFI_INVALID_PARAMETER; > + } > + >Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This); > >Status = CoherentPciIoAllocateBuffer (This, Type, MemoryType, Pages, > @@ -995,6 +1021,19 @@ NonCoherentPciIoMap ( >EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor; >BOOLEAN Bounce; > > + if (HostAddress == NULL || > + NumberOfBytes == NULL || > + DeviceAddress == NULL || > + Mapping == NULL) { > +return EFI_INVALID_PARAMETER; > + } > + > + if (Operation != EfiPciIoOperationBusMasterRead && > + Operation != EfiPciIoOperationBusMasterWrite && > + Operation != EfiPciIoOperationBusMasterCommonBuffer) { > +return EFI_INVALID_PARAMETER; > + } > + >MapInfo = AllocatePool (sizeof *MapInfo); >if (MapInfo == NULL) { > return EFI_OUT_OF_RESOURCES; > @@ -1228,8 +1267,17 @@ PciIoAttributes ( >NON_DISCOVERABLE_PCI_DEVICE *Dev; >BOOLEAN Enable; > > + #define DEV_SUPPORTED_ATTRIBUTES \ > +(EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE) > + >Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This); > > + if (Attributes) { > + if ((Attributes & (~(DEV_SUPPORTED_ATTRIBUTES))) != 0) { > +return EFI_UNSUPPORTED; > + } > +} > + >Enable = FALSE; >switch (Operation) { >case EfiPciIoAttributeOperationGet: > @@ -1243,7 +1291,7 @@ PciIoAttributes ( > if (Result == NULL) { >return EFI_INVALID_PARAMETER; > } > -*Result = EFI_PCI_DEVICE_ENABLE | > EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE; > +*Result = DEV_SUPPORTED_ATTRIBUTES; > break; > >case EfiPciIoAttributeOperationEnable: > -- > 2.18.0 > ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel
[edk2] [PATCH 3/3] MdeModulePkg/NonDiscoverablePciDeviceDxe: add missing validation
UEFI SCT crashed and failed in NonDiscoverablePciDeviceDxe becase required checks were not performed. Perform parameters validation in NonDiscoverablePciDeviceDxe. Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Vladimir Olovyannikov --- .../NonDiscoverablePciDeviceIo.c | 50 ++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c index 0e42ae4bf6ec..07118d59fd68 100644 --- a/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c +++ b/MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c @@ -52,6 +52,10 @@ GetBarResource ( BarIndex -= (UINT8)Dev->BarOffset; + if (BarIndex >= Dev->BarCount) { +return EFI_UNSUPPORTED; + } + for (Desc = Dev->Device->Resources; Desc->Desc != ACPI_END_TAG_DESCRIPTOR; Desc = (VOID *)((UINT8 *)Desc + Desc->Len + 3)) { @@ -597,6 +601,19 @@ CoherentPciIoMap ( EFI_STATUSStatus; NON_DISCOVERABLE_PCI_DEVICE_MAP_INFO *MapInfo; + if (Operation != EfiPciIoOperationBusMasterRead && + Operation != EfiPciIoOperationBusMasterWrite && + Operation != EfiPciIoOperationBusMasterCommonBuffer) { +return EFI_INVALID_PARAMETER; + } + + if (HostAddress == NULL || + NumberOfBytes == NULL || + DeviceAddress == NULL || + Mapping == NULL) { +return EFI_INVALID_PARAMETER; + } + // // If HostAddress exceeds 4 GB, and this device does not support 64-bit DMA // addressing, we need to allocate a bounce buffer and copy over the data. @@ -720,6 +737,11 @@ CoherentPciIoAllocateBuffer ( return EFI_UNSUPPORTED; } + if ((MemoryType != EfiBootServicesData) && + (MemoryType != EfiRuntimeServicesData)) { +return EFI_INVALID_PARAMETER; + } + // // Allocate below 4 GB if the dual address cycle attribute has not // been set. If the system has no memory available below 4 GB, there @@ -877,6 +899,10 @@ NonCoherentPciIoAllocateBuffer ( NON_DISCOVERABLE_DEVICE_UNCACHED_ALLOCATION *Alloc; VOID*AllocAddress; + if (HostAddress == NULL) { +return EFI_INVALID_PARAMETER; + } + Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This); Status = CoherentPciIoAllocateBuffer (This, Type, MemoryType, Pages, @@ -995,6 +1021,19 @@ NonCoherentPciIoMap ( EFI_GCD_MEMORY_SPACE_DESCRIPTOR GcdDescriptor; BOOLEAN Bounce; + if (HostAddress == NULL || + NumberOfBytes == NULL || + DeviceAddress == NULL || + Mapping == NULL) { +return EFI_INVALID_PARAMETER; + } + + if (Operation != EfiPciIoOperationBusMasterRead && + Operation != EfiPciIoOperationBusMasterWrite && + Operation != EfiPciIoOperationBusMasterCommonBuffer) { +return EFI_INVALID_PARAMETER; + } + MapInfo = AllocatePool (sizeof *MapInfo); if (MapInfo == NULL) { return EFI_OUT_OF_RESOURCES; @@ -1228,8 +1267,17 @@ PciIoAttributes ( NON_DISCOVERABLE_PCI_DEVICE *Dev; BOOLEAN Enable; + #define DEV_SUPPORTED_ATTRIBUTES \ +(EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE) + Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This); + if (Attributes) { + if ((Attributes & (~(DEV_SUPPORTED_ATTRIBUTES))) != 0) { +return EFI_UNSUPPORTED; + } +} + Enable = FALSE; switch (Operation) { case EfiPciIoAttributeOperationGet: @@ -1243,7 +1291,7 @@ PciIoAttributes ( if (Result == NULL) { return EFI_INVALID_PARAMETER; } -*Result = EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE; +*Result = DEV_SUPPORTED_ATTRIBUTES; break; case EfiPciIoAttributeOperationEnable: -- 2.18.0 ___ edk2-devel mailing list edk2-devel@lists.01.org https://lists.01.org/mailman/listinfo/edk2-devel