PCI: iproc: Fix out-of-bound array accesses
authorBharat Gooty <bharat.gooty@broadcom.com>
Thu, 1 Oct 2020 06:00:52 +0000 (11:30 +0530)
committerLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Mon, 30 Nov 2020 18:24:36 +0000 (18:24 +0000)
Declare the full size array for all revisions of PAX register sets
to avoid potentially out of bound access of the register array
when they are being initialized in iproc_pcie_rev_init().

Link: https://lore.kernel.org/r/20201001060054.6616-2-srinath.mannam@broadcom.com
Fixes: 06324ede76cdf ("PCI: iproc: Improve core register population")
Signed-off-by: Bharat Gooty <bharat.gooty@broadcom.com>
Signed-off-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
drivers/pci/controller/pcie-iproc.c

index 905e938..d901b9d 100644 (file)
@@ -307,7 +307,7 @@ enum iproc_pcie_reg {
 };
 
 /* iProc PCIe PAXB BCMA registers */
-static const u16 iproc_pcie_reg_paxb_bcma[] = {
+static const u16 iproc_pcie_reg_paxb_bcma[IPROC_PCIE_MAX_NUM_REG] = {
        [IPROC_PCIE_CLK_CTRL]           = 0x000,
        [IPROC_PCIE_CFG_IND_ADDR]       = 0x120,
        [IPROC_PCIE_CFG_IND_DATA]       = 0x124,
@@ -318,7 +318,7 @@ static const u16 iproc_pcie_reg_paxb_bcma[] = {
 };
 
 /* iProc PCIe PAXB registers */
-static const u16 iproc_pcie_reg_paxb[] = {
+static const u16 iproc_pcie_reg_paxb[IPROC_PCIE_MAX_NUM_REG] = {
        [IPROC_PCIE_CLK_CTRL]           = 0x000,
        [IPROC_PCIE_CFG_IND_ADDR]       = 0x120,
        [IPROC_PCIE_CFG_IND_DATA]       = 0x124,
@@ -334,7 +334,7 @@ static const u16 iproc_pcie_reg_paxb[] = {
 };
 
 /* iProc PCIe PAXB v2 registers */
-static const u16 iproc_pcie_reg_paxb_v2[] = {
+static const u16 iproc_pcie_reg_paxb_v2[IPROC_PCIE_MAX_NUM_REG] = {
        [IPROC_PCIE_CLK_CTRL]           = 0x000,
        [IPROC_PCIE_CFG_IND_ADDR]       = 0x120,
        [IPROC_PCIE_CFG_IND_DATA]       = 0x124,
@@ -363,7 +363,7 @@ static const u16 iproc_pcie_reg_paxb_v2[] = {
 };
 
 /* iProc PCIe PAXC v1 registers */
-static const u16 iproc_pcie_reg_paxc[] = {
+static const u16 iproc_pcie_reg_paxc[IPROC_PCIE_MAX_NUM_REG] = {
        [IPROC_PCIE_CLK_CTRL]           = 0x000,
        [IPROC_PCIE_CFG_IND_ADDR]       = 0x1f0,
        [IPROC_PCIE_CFG_IND_DATA]       = 0x1f4,
@@ -372,7 +372,7 @@ static const u16 iproc_pcie_reg_paxc[] = {
 };
 
 /* iProc PCIe PAXC v2 registers */
-static const u16 iproc_pcie_reg_paxc_v2[] = {
+static const u16 iproc_pcie_reg_paxc_v2[IPROC_PCIE_MAX_NUM_REG] = {
        [IPROC_PCIE_MSI_GIC_MODE]       = 0x050,
        [IPROC_PCIE_MSI_BASE_ADDR]      = 0x074,
        [IPROC_PCIE_MSI_WINDOW_SIZE]    = 0x078,