• Bjorn Helgaas's avatar
    PCI: Supply CPU physical address (not bus address) to iomem_is_exclusive() · 2189f999
    Bjorn Helgaas authored
    commit ca620723 upstream.
    
    iomem_is_exclusive() requires a CPU physical address, but on some arches we
    supplied a PCI bus address instead.
    
    On most arches, pci_resource_to_user(res) returns "res->start", which is a
    CPU physical address.  But on microblaze, mips, powerpc, and sparc, it
    returns the PCI bus address corresponding to "res->start".
    
    The result is that pci_mmap_resource() may fail when it shouldn't (if the
    bus address happens to match an existing resource), or it may succeed when
    it should fail (if the resource is exclusive but the bus address doesn't
    match it).
    
    Call iomem_is_exclusive() with "res->start", which is always a CPU physical
    address, not the result of pci_resource_to_user().
    
    Fixes: e8de1481 ("resource: allow MMIO exclusivity for device drivers")
    Suggested-by: default avatarYinghai Lu <yinghai@kernel.org>
    Signed-off-by: default avatarBjorn Helgaas <bhelgaas@google.com>
    CC: Arjan van de Ven <arjan@linux.intel.com>
    Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
    2189f999
pci-sysfs.c 39.2 KB