From: Ed Swierk Date: Mon, 3 Nov 2008 22:41:16 +0000 (-0800) Subject: PCI: fix range check on mmapped sysfs resource files X-Git-Tag: v2.6.28-rc4~15^2 X-Git-Url: http://pilppa.com/gitweb/?a=commitdiff_plain;h=88e7df0b7ee717f9db3333fb1248827bbdb2d4d3;p=linux-2.6-omap-h63xx.git PCI: fix range check on mmapped sysfs resource files pci_mmap_fits() returns the wrong answer if the sysfs resource file size is not a multiple of the page size. vm_end and vm_start are already page-aligned, so size - start < nr, causing mmap() to return EINVAL. Signed-off-by: Ed Swierk Signed-off-by: Andrew Morton Signed-off-by: Jesse Barnes --- diff --git a/drivers/pci/pci-sysfs.c b/drivers/pci/pci-sysfs.c index 110022d7868..5d72866897a 100644 --- a/drivers/pci/pci-sysfs.c +++ b/drivers/pci/pci-sysfs.c @@ -575,7 +575,7 @@ static int pci_mmap_fits(struct pci_dev *pdev, int resno, struct vm_area_struct nr = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT; start = vma->vm_pgoff; - size = pci_resource_len(pdev, resno) >> PAGE_SHIFT; + size = ((pci_resource_len(pdev, resno) - 1) >> PAGE_SHIFT) + 1; if (start < size && size - start >= nr) return 1; WARN(1, "process \"%s\" tried to map 0x%08lx-0x%08lx on %s BAR %d (size 0x%08lx)\n",