| From: Paul Burton <paul.burton@mips.com> |
| Date: Thu, 12 Jul 2018 09:33:04 -0700 |
| Subject: MIPS: Fix off-by-one in pci_resource_to_user() |
| |
| commit 38c0a74fe06da3be133cae3fb7bde6a9438e698b upstream. |
| |
| The MIPS implementation of pci_resource_to_user() introduced in v3.12 by |
| commit 4c2924b725fb ("MIPS: PCI: Use pci_resource_to_user to map pci |
| memory space properly") incorrectly sets *end to the address of the |
| byte after the resource, rather than the last byte of the resource. |
| |
| This results in userland seeing resources as a byte larger than they |
| actually are, for example a 32 byte BAR will be reported by a tool such |
| as lspci as being 33 bytes in size: |
| |
| Region 2: I/O ports at 1000 [disabled] [size=33] |
| |
| Correct this by subtracting one from the calculated end address, |
| reporting the correct address to userland. |
| |
| Signed-off-by: Paul Burton <paul.burton@mips.com> |
| Reported-by: Rui Wang <rui.wang@windriver.com> |
| Fixes: 4c2924b725fb ("MIPS: PCI: Use pci_resource_to_user to map pci memory space properly") |
| Cc: James Hogan <jhogan@kernel.org> |
| Cc: Ralf Baechle <ralf@linux-mips.org> |
| Cc: Wolfgang Grandegger <wg@grandegger.com> |
| Cc: linux-mips@linux-mips.org |
| Patchwork: https://patchwork.linux-mips.org/patch/19829/ |
| [bwh: Backported to 3.16: adjust filename] |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| arch/mips/include/asm/pci.h | 2 +- |
| 1 file changed, 1 insertion(+), 1 deletion(-) |
| |
| --- a/arch/mips/include/asm/pci.h |
| +++ b/arch/mips/include/asm/pci.h |
| @@ -87,7 +87,7 @@ static inline void pci_resource_to_user( |
| phys_t size = resource_size(rsrc); |
| |
| *start = fixup_bigphys_addr(rsrc->start, size); |
| - *end = rsrc->start + size; |
| + *end = rsrc->start + size - 1; |
| } |
| |
| /* |