PCI: Fail pci_map_rom() if the option ROM is invalid
authorChangbin Du <changbin.du@intel.com>
Wed, 8 Nov 2017 00:26:53 +0000 (18:26 -0600)
committerBjorn Helgaas <bhelgaas@google.com>
Wed, 8 Nov 2017 20:47:07 +0000 (14:47 -0600)
If we detect a invalid PCI option ROM (e.g., invalid ROM header signature),
we should unmap it immediately and fail. It doesn't make any sense to
return a mapped area with size of 0.

I have seen this case on Intel GVTg vGPU, which has no VBIOS. It will not
cause a real problem, but we should skip it as early as possible.

Signed-off-by: Changbin Du <changbin.du@intel.com>
[bhelgaas: split non-functional change into separate patch]
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
drivers/pci/rom.c

index 0decf0d81cf589c0b142aef74ff3a6aac865fc9c..1f5e6af96c834307c8acf0afcab4b8b437fb3226 100644 (file)
@@ -156,8 +156,13 @@ void __iomem *pci_map_rom(struct pci_dev *pdev, size_t *size)
         * True size is important if the ROM is going to be copied.
         */
        *size = pci_get_rom_size(pdev, rom, *size);
+       if (!*size)
+               goto invalid_rom;
+
        return rom;
 
+invalid_rom:
+       iounmap(rom);
 err_ioremap:
        /* restore enable if ioremap fails */
        if (!(res->flags & IORESOURCE_ROM_ENABLE))