summaryrefslogtreecommitdiffstats
path: root/include/linux/log2.h
diff options
context:
space:
mode:
authorNiklas Cassel <niklas.cassel@axis.com>2017-04-03 17:35:12 -0500
committerBjorn Helgaas <bhelgaas@google.com>2017-04-04 08:24:25 -0500
commit794a8604fe6e4a311373cde57a86ad4aab9d32b8 (patch)
tree6e6a8ef04b340b3e0a9044ea506e2102c8fdc249 /include/linux/log2.h
parent6665f8a307696a0edd4c1233b4cc0f5ed6083525 (diff)
downloadlinux-794a8604fe6e4a311373cde57a86ad4aab9d32b8.tar.gz
linux-794a8604fe6e4a311373cde57a86ad4aab9d32b8.tar.bz2
linux-794a8604fe6e4a311373cde57a86ad4aab9d32b8.zip
PCI: dwc: Fix dw_pcie_ops NULL pointer dereference
Fix a crash from dereferencing a NULL dw_pcie_ops pointer. For example, on ARTPEC-6: Unable to handle kernel NULL pointer dereference at virtual address 00000004 pgd = c0204000 [00000004] *pgd=00000000 Internal error: Oops: 5 [#1] SMP ARM Modules linked in: CPU: 0 PID: 1 Comm: swapper/0 Not tainted 4.11.0-rc3-next-20170321 #1 Hardware name: Axis ARTPEC-6 Platform task: db098000 task.stack: db096000 PC is at dw_pcie_writel_dbi+0x2c/0xd0 Prior to 442ec4c04d12 ("PCI: dwc: all: Split struct pcie_port into host-only and core structures"), every driver had a struct pcie_host_ops with function pointers, typically used as: if (pp->ops->readl_rc) return pp->ops->readl_rc(...); 442ec4c04d12 split struct pcie_host_ops into two pieces: struct dw_pcie_host_ops and struct dw_pcie_ops, so the above became: if (pci->ops->readl_dbi) return pci->ops->readl_dbi(...); But pcie-artpec6.c and pcie-designware-plat.c don't need the dw_pcie_ops pointers and didn't supply a pci->ops struct, which leads to NULL pointer dereferences. Supply an empty struct dw_pcie_ops to avoid the NULL pointer dereferences. [bhelgaas: changelog] Fixes: 442ec4c04d12 ("PCI: dwc: all: Split struct pcie_port into host-only and core structures") Signed-off-by: Niklas Cassel <niklas.cassel@axis.com> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Acked-by: Kishon Vijay Abraham I <kishon@ti.com> Acked-by: Joao Pinto <jpinto@synopsys.com>
Diffstat (limited to 'include/linux/log2.h')
0 files changed, 0 insertions, 0 deletions