Commit dc73a380 authored by Kangjie Lu's avatar Kangjie Lu Committed by Greg Kroah-Hartman

PCI: xilinx: Check for __get_free_pages() failure

[ Upstream commit 699ca301 ]

If __get_free_pages() fails, return -ENOMEM to avoid a NULL pointer
dereference.
Signed-off-by: default avatarKangjie Lu <kjlu@umn.edu>
Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
Reviewed-by: default avatarSteven Price <steven.price@arm.com>
Reviewed-by: default avatarMukesh Ojha <mojha@codeaurora.org>
Signed-off-by: default avatarSasha Levin <sashal@kernel.org>
parent 404ee275
...@@ -336,14 +336,19 @@ static const struct irq_domain_ops msi_domain_ops = { ...@@ -336,14 +336,19 @@ static const struct irq_domain_ops msi_domain_ops = {
* xilinx_pcie_enable_msi - Enable MSI support * xilinx_pcie_enable_msi - Enable MSI support
* @port: PCIe port information * @port: PCIe port information
*/ */
static void xilinx_pcie_enable_msi(struct xilinx_pcie_port *port) static int xilinx_pcie_enable_msi(struct xilinx_pcie_port *port)
{ {
phys_addr_t msg_addr; phys_addr_t msg_addr;
port->msi_pages = __get_free_pages(GFP_KERNEL, 0); port->msi_pages = __get_free_pages(GFP_KERNEL, 0);
if (!port->msi_pages)
return -ENOMEM;
msg_addr = virt_to_phys((void *)port->msi_pages); msg_addr = virt_to_phys((void *)port->msi_pages);
pcie_write(port, 0x0, XILINX_PCIE_REG_MSIBASE1); pcie_write(port, 0x0, XILINX_PCIE_REG_MSIBASE1);
pcie_write(port, msg_addr, XILINX_PCIE_REG_MSIBASE2); pcie_write(port, msg_addr, XILINX_PCIE_REG_MSIBASE2);
return 0;
} }
/* INTx Functions */ /* INTx Functions */
...@@ -498,6 +503,7 @@ static int xilinx_pcie_init_irq_domain(struct xilinx_pcie_port *port) ...@@ -498,6 +503,7 @@ static int xilinx_pcie_init_irq_domain(struct xilinx_pcie_port *port)
struct device *dev = port->dev; struct device *dev = port->dev;
struct device_node *node = dev->of_node; struct device_node *node = dev->of_node;
struct device_node *pcie_intc_node; struct device_node *pcie_intc_node;
int ret;
/* Setup INTx */ /* Setup INTx */
pcie_intc_node = of_get_next_child(node, NULL); pcie_intc_node = of_get_next_child(node, NULL);
...@@ -526,7 +532,9 @@ static int xilinx_pcie_init_irq_domain(struct xilinx_pcie_port *port) ...@@ -526,7 +532,9 @@ static int xilinx_pcie_init_irq_domain(struct xilinx_pcie_port *port)
return -ENODEV; return -ENODEV;
} }
xilinx_pcie_enable_msi(port); ret = xilinx_pcie_enable_msi(port);
if (ret)
return ret;
} }
return 0; return 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment