]> git.proxmox.com Git - mirror_edk2.git/commitdiff
MdeModulePkg/Pci: Fixed Asserts in SCT PCIIO Protocol Test.
authorGaurav Jain <gaurav.jain@nxp.com>
Tue, 25 Feb 2020 12:00:41 +0000 (20:00 +0800)
committermergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
Thu, 5 Mar 2020 02:14:37 +0000 (02:14 +0000)
ASSERT in PollMem_Conf, CopyMem_Conf, SetBarAttributes_Conf
Conformance Test.
SCT Test expect return as Invalid Parameter or Unsupported.
Added Checks for Function Parameters.
return Invalid or Unsupported if Check fails.

Added Checks in PciIoPollIo(), PciIoIoRead()
PciIoIoWrite()

Signed-off-by: Gaurav Jain <gaurav.jain@nxp.com>
Reviewed-by: Hao A Wu <hao.a.wu@intel.com>
MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.c
MdeModulePkg/Bus/Pci/NonDiscoverablePciDeviceDxe/NonDiscoverablePciDeviceIo.h

index 2d55c96993225b6477839361cec343ce7883a4e7..c3e83003a01c5e79c7b04e82d84722a2bd885ad1 100644 (file)
@@ -93,6 +93,31 @@ PciIoPollMem (
   OUT UINT64                      *Result\r
   )\r
 {\r
   OUT UINT64                      *Result\r
   )\r
 {\r
+  NON_DISCOVERABLE_PCI_DEVICE         *Dev;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;\r
+  UINTN                               Count;\r
+  EFI_STATUS                          Status;\r
+\r
+  if ((UINT32)Width > EfiPciIoWidthUint64) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  if (Result == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Count = 1;\r
+\r
+  Status = GetBarResource (Dev, BarIndex, &Desc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -126,6 +151,31 @@ PciIoPollIo (
   OUT UINT64                      *Result\r
   )\r
 {\r
   OUT UINT64                      *Result\r
   )\r
 {\r
+  NON_DISCOVERABLE_PCI_DEVICE         *Dev;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;\r
+  UINTN                               Count;\r
+  EFI_STATUS                          Status;\r
+\r
+  if ((UINT32)Width > EfiPciIoWidthUint64) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  if (Result == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Count = 1;\r
+\r
+  Status = GetBarResource (Dev, BarIndex, &Desc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -396,6 +446,29 @@ PciIoIoRead (
   IN OUT VOID                         *Buffer\r
   )\r
 {\r
   IN OUT VOID                         *Buffer\r
   )\r
 {\r
+  NON_DISCOVERABLE_PCI_DEVICE         *Dev;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;\r
+  EFI_STATUS                          Status;\r
+\r
+  if ((UINT32)Width >= EfiPciIoWidthMaximum) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  if (Buffer == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+\r
+  Status = GetBarResource (Dev, BarIndex, &Desc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -425,6 +498,29 @@ PciIoIoWrite (
   IN OUT VOID                         *Buffer\r
   )\r
 {\r
   IN OUT VOID                         *Buffer\r
   )\r
 {\r
+  NON_DISCOVERABLE_PCI_DEVICE         *Dev;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;\r
+  EFI_STATUS                          Status;\r
+\r
+  if ((UINT32)Width >= EfiPciIoWidthMaximum) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  if (Buffer == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+\r
+  Status = GetBarResource (Dev, BarIndex, &Desc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -556,6 +652,35 @@ PciIoCopyMem (
   IN     UINTN                        Count\r
   )\r
 {\r
   IN     UINTN                        Count\r
   )\r
 {\r
+  NON_DISCOVERABLE_PCI_DEVICE         *Dev;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *DestDesc;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *SrcDesc;\r
+  EFI_STATUS                          Status;\r
+\r
+  if ((UINT32)Width > EfiPciIoWidthUint64) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+\r
+  Status = GetBarResource (Dev, DestBarIndex, &DestDesc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (DestOffset + (Count << (Width & 0x3)) > DestDesc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  Status = GetBarResource (Dev, SrcBarIndex, &SrcDesc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (SrcOffset + (Count << (Width & 0x3)) > SrcDesc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
@@ -1265,9 +1390,6 @@ PciIoAttributes (
   NON_DISCOVERABLE_PCI_DEVICE   *Dev;\r
   BOOLEAN                       Enable;\r
 \r
   NON_DISCOVERABLE_PCI_DEVICE   *Dev;\r
   BOOLEAN                       Enable;\r
 \r
-  #define DEV_SUPPORTED_ATTRIBUTES \\r
-    (EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE)\r
-\r
   Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
 \r
   if ((Attributes & (~(DEV_SUPPORTED_ATTRIBUTES))) != 0) {\r
   Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
 \r
   if ((Attributes & (~(DEV_SUPPORTED_ATTRIBUTES))) != 0) {\r
@@ -1414,6 +1536,33 @@ PciIoSetBarAttributes (
   IN OUT UINT64                       *Length\r
   )\r
 {\r
   IN OUT UINT64                       *Length\r
   )\r
 {\r
+  NON_DISCOVERABLE_PCI_DEVICE         *Dev;\r
+  EFI_ACPI_ADDRESS_SPACE_DESCRIPTOR   *Desc;\r
+  EFI_PCI_IO_PROTOCOL_WIDTH           Width;\r
+  UINTN                               Count;\r
+  EFI_STATUS                          Status;\r
+\r
+  if ((Attributes & (~DEV_SUPPORTED_ATTRIBUTES)) != 0) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
+  if (Offset == NULL || Length == NULL) {\r
+    return EFI_INVALID_PARAMETER;\r
+  }\r
+\r
+  Dev = NON_DISCOVERABLE_PCI_DEVICE_FROM_PCI_IO(This);\r
+  Width = EfiPciIoWidthUint8;\r
+  Count = (UINT32) *Length;\r
+\r
+  Status = GetBarResource(Dev, BarIndex, &Desc);\r
+  if (EFI_ERROR (Status)) {\r
+    return Status;\r
+  }\r
+\r
+  if (*Offset + (Count << (Width & 0x3)) > Desc->AddrLen) {\r
+    return EFI_UNSUPPORTED;\r
+  }\r
+\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
   ASSERT (FALSE);\r
   return EFI_UNSUPPORTED;\r
 }\r
index 6511fbb13770f4c8af03bbe4216eeb532e5f7c5d..15541c281153d3924b4750808a4e7fa162a6d962 100644 (file)
@@ -30,6 +30,9 @@
         CR (PciIoPointer, NON_DISCOVERABLE_PCI_DEVICE, PciIo, \\r
             NON_DISCOVERABLE_PCI_DEVICE_SIG)\r
 \r
         CR (PciIoPointer, NON_DISCOVERABLE_PCI_DEVICE, PciIo, \\r
             NON_DISCOVERABLE_PCI_DEVICE_SIG)\r
 \r
+#define DEV_SUPPORTED_ATTRIBUTES \\r
+    (EFI_PCI_DEVICE_ENABLE | EFI_PCI_IO_ATTRIBUTE_DUAL_ADDRESS_CYCLE)\r
+\r
 #define PCI_ID_VENDOR_UNKNOWN         0xffff\r
 #define PCI_ID_DEVICE_DONTCARE        0x0000\r
 \r
 #define PCI_ID_VENDOR_UNKNOWN         0xffff\r
 #define PCI_ID_DEVICE_DONTCARE        0x0000\r
 \r