isdn: hfcpci: fix potential NULL pointer dereference
authorKangjie Lu <kjlu@umn.edu>
Tue, 12 Mar 2019 05:54:55 +0000 (00:54 -0500)
committerDavid S. Miller <davem@davemloft.net>
Tue, 12 Mar 2019 21:36:02 +0000 (14:36 -0700)
In case ioremap fails, the fix releases resources and returns.
The following printk is for logging purpose and thus is
preserved.

Signed-off-by: Kangjie Lu <kjlu@umn.edu>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/isdn/hardware/mISDN/hfcpci.c

index ebb3fa2e1d00f1627d42363c3478999b1b0ee234..362aa5450a5ec6764f71fcf9c0860fa54a066464 100644 (file)
@@ -2032,10 +2032,19 @@ setup_hw(struct hfc_pci *hc)
        hc->hw.fifos = buffer;
        pci_write_config_dword(hc->pdev, 0x80, hc->hw.dmahandle);
        hc->hw.pci_io = ioremap((ulong) hc->hw.pci_io, 256);
+       if (unlikely(!hc->hw.pci_io)) {
+               printk(KERN_WARNING
+                      "HFC-PCI: Error in ioremap for PCI!\n");
+               pci_free_consistent(hc->pdev, 0x8000, hc->hw.fifos,
+                                   hc->hw.dmahandle);
+               return 1;
+       }
+
        printk(KERN_INFO
               "HFC-PCI: defined at mem %#lx fifo %#lx(%#lx) IRQ %d HZ %d\n",
               (u_long) hc->hw.pci_io, (u_long) hc->hw.fifos,
               (u_long) hc->hw.dmahandle, hc->irq, HZ);
+
        /* enable memory mapped ports, disable busmaster */
        pci_write_config_word(hc->pdev, PCI_COMMAND, PCI_ENA_MEMIO);
        hc->hw.int_m2 = 0;