powerpc/powernv: Add sanity checks to pnv_pci_get_{gpu|npu}_dev
authorAlistair Popple <alistair@popple.id.au>
Mon, 3 Apr 2017 09:51:43 +0000 (19:51 +1000)
committerMichael Ellerman <mpe@ellerman.id.au>
Mon, 3 Apr 2017 13:36:00 +0000 (23:36 +1000)
The pnv_pci_get_{gpu|npu}_dev functions are used to find associations
between nvlink PCIe devices and standard PCIe devices. However they
lacked basic sanity checking which results in NULL pointer
dereferencing if they are incorrect called can be harder to spot than
an explicit WARN_ON.

Signed-off-by: Alistair Popple <alistair@popple.id.au>
Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/platforms/powernv/npu-dma.c

index 1c383f38031dfe3a9db91e6394f47cd0699f1d83..050bd5da7096ed4e094156ab331ab966cd62b923 100644 (file)
@@ -37,6 +37,12 @@ struct pci_dev *pnv_pci_get_gpu_dev(struct pci_dev *npdev)
        struct device_node *dn;
        struct pci_dev *gpdev;
 
+       if (WARN_ON(!npdev))
+               return NULL;
+
+       if (WARN_ON(!npdev->dev.of_node))
+               return NULL;
+
        /* Get assoicated PCI device */
        dn = of_parse_phandle(npdev->dev.of_node, "ibm,gpu", 0);
        if (!dn)
@@ -55,6 +61,12 @@ struct pci_dev *pnv_pci_get_npu_dev(struct pci_dev *gpdev, int index)
        struct device_node *dn;
        struct pci_dev *npdev;
 
+       if (WARN_ON(!gpdev))
+               return NULL;
+
+       if (WARN_ON(!gpdev->dev.of_node))
+               return NULL;
+
        /* Get assoicated PCI device */
        dn = of_parse_phandle(gpdev->dev.of_node, "ibm,npu", index);
        if (!dn)