瀏覽代碼

firewire: ohci: sanity-check MMIO resource

pci_request_region() does not fail on resources that have not been
allocated by the BIOS or by the kernel, so to avoid accessing
registers that are not there, we have to check for this explicitly.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
Clemens Ladisch 13 年之前
父節點
當前提交
7baab9acfb
共有 1 個文件被更改,包括 7 次插入0 次删除
  1. 7 0
      drivers/firewire/ohci.c

+ 7 - 0
drivers/firewire/ohci.c

@@ -3545,6 +3545,13 @@ static int __devinit pci_probe(struct pci_dev *dev,
 
 
 	INIT_WORK(&ohci->bus_reset_work, bus_reset_work);
 	INIT_WORK(&ohci->bus_reset_work, bus_reset_work);
 
 
+	if (!(pci_resource_flags(dev, 0) & IORESOURCE_MEM) ||
+	    pci_resource_len(dev, 0) < OHCI1394_REGISTER_SIZE) {
+		dev_err(&dev->dev, "invalid MMIO resource\n");
+		err = -ENXIO;
+		goto fail_disable;
+	}
+
 	err = pci_request_region(dev, 0, ohci_driver_name);
 	err = pci_request_region(dev, 0, ohci_driver_name);
 	if (err) {
 	if (err) {
 		dev_err(&dev->dev, "MMIO resource unavailable\n");
 		dev_err(&dev->dev, "MMIO resource unavailable\n");