aboutsummaryrefslogtreecommitdiff
path: root/pkgs/patches-linux-5.15/0007-PCI-mvebu-Check-for-valid-ports.patch
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/patches-linux-5.15/0007-PCI-mvebu-Check-for-valid-ports.patch')
-rw-r--r--pkgs/patches-linux-5.15/0007-PCI-mvebu-Check-for-valid-ports.patch54
1 files changed, 54 insertions, 0 deletions
diff --git a/pkgs/patches-linux-5.15/0007-PCI-mvebu-Check-for-valid-ports.patch b/pkgs/patches-linux-5.15/0007-PCI-mvebu-Check-for-valid-ports.patch
new file mode 100644
index 0000000..9ffd1bb
--- /dev/null
+++ b/pkgs/patches-linux-5.15/0007-PCI-mvebu-Check-for-valid-ports.patch
@@ -0,0 +1,54 @@
+From 848b0bb310d53bfdf4492605ea23f85f5534d7d3 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Pali=20Roh=C3=A1r?= <pali@kernel.org>
+Date: Tue, 16 Nov 2021 10:51:43 +0100
+Subject: [PATCH 07/90] PCI: mvebu: Check for valid ports
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+Some mvebu ports do not have to be initialized. So skip these uninitialized
+mvebu ports in every port iteration function to prevent access to unmapped
+memory or dereferencing NULL pointers. Uninitialized mvebu port has base
+address set to NULL.
+
+Signed-off-by: Pali Rohár <pali@kernel.org>
+Cc: stable@vger.kernel.org
+---
+ drivers/pci/controller/pci-mvebu.c | 7 +++++++
+ 1 file changed, 7 insertions(+)
+
+diff --git a/drivers/pci/controller/pci-mvebu.c b/drivers/pci/controller/pci-mvebu.c
+index 504eb9b94c0f..e4c6dc73159f 100644
+--- a/drivers/pci/controller/pci-mvebu.c
++++ b/drivers/pci/controller/pci-mvebu.c
+@@ -707,6 +707,9 @@ static struct mvebu_pcie_port *mvebu_pcie_find_port(struct mvebu_pcie *pcie,
+ for (i = 0; i < pcie->nports; i++) {
+ struct mvebu_pcie_port *port = &pcie->ports[i];
+
++ if (!port->base)
++ continue;
++
+ if (bus->number == 0 && port->devfn == devfn)
+ return port;
+ if (bus->number != 0 &&
+@@ -882,6 +885,8 @@ static int mvebu_pcie_suspend(struct device *dev)
+ pcie = dev_get_drvdata(dev);
+ for (i = 0; i < pcie->nports; i++) {
+ struct mvebu_pcie_port *port = pcie->ports + i;
++ if (!port->base)
++ continue;
+ port->saved_pcie_stat = mvebu_readl(port, PCIE_STAT_OFF);
+ }
+
+@@ -896,6 +901,8 @@ static int mvebu_pcie_resume(struct device *dev)
+ pcie = dev_get_drvdata(dev);
+ for (i = 0; i < pcie->nports; i++) {
+ struct mvebu_pcie_port *port = pcie->ports + i;
++ if (!port->base)
++ continue;
+ mvebu_writel(port, port->saved_pcie_stat, PCIE_STAT_OFF);
+ mvebu_pcie_setup_hw(port);
+ }
+--
+2.34.1
+