Skip to content

Commit 5f36c8b

Browse files
dwmw2gregkh
authored andcommitted
PCI: Fix pci_mmap_fits() for HAVE_PCI_RESOURCE_TO_USER platforms
commit 6bccc7f426abd640f08d8c75fb22f99483f201b4 upstream. In the PCI_MMAP_PROCFS case when the address being passed by the user is a 'user visible' resource address based on the bus window, and not the actual contents of the resource, that's what we need to be checking it against. Signed-off-by: David Woodhouse <dwmw@amazon.co.uk> Signed-off-by: Bjorn Helgaas <bhelgaas@google.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent 6384f78 commit 5f36c8b

1 file changed

Lines changed: 7 additions & 3 deletions

File tree

drivers/pci/pci-sysfs.c

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -973,15 +973,19 @@ void pci_remove_legacy_files(struct pci_bus *b)
973973
int pci_mmap_fits(struct pci_dev *pdev, int resno, struct vm_area_struct *vma,
974974
enum pci_mmap_api mmap_api)
975975
{
976-
unsigned long nr, start, size, pci_start;
976+
unsigned long nr, start, size;
977+
resource_size_t pci_start = 0, pci_end;
977978

978979
if (pci_resource_len(pdev, resno) == 0)
979980
return 0;
980981
nr = vma_pages(vma);
981982
start = vma->vm_pgoff;
982983
size = ((pci_resource_len(pdev, resno) - 1) >> PAGE_SHIFT) + 1;
983-
pci_start = (mmap_api == PCI_MMAP_PROCFS) ?
984-
pci_resource_start(pdev, resno) >> PAGE_SHIFT : 0;
984+
if (mmap_api == PCI_MMAP_PROCFS) {
985+
pci_resource_to_user(pdev, resno, &pdev->resource[resno],
986+
&pci_start, &pci_end);
987+
pci_start >>= PAGE_SHIFT;
988+
}
985989
if (start >= pci_start && start < pci_start + size &&
986990
start + nr <= pci_start + size)
987991
return 1;

0 commit comments

Comments
 (0)