uio: fix vma io range check in mmap
authorBin Wang <binw@marvell.com>
Tue, 25 Mar 2014 05:52:06 +0000 (13:52 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 27 May 2014 21:11:06 +0000 (14:11 -0700)
the vma range size is always page size aligned in mmap, while the
real io space range may not be page aligned, thus leading to range
check failure in the uio_mmap_physical().

for example, in a case of io range size "mem->size == 1KB", and we
have (vma->vm_end - vma->vm_start) == 4KB, due to "len" is aligned
to page size in do_mmap_pgoff().

now fix this issue by align mem->size to page size in the check.

Signed-off-by: Bin Wang <binw@marvell.com>
Signed-off-by: Nobuhiro Iwamatsu <nobuhiro.iwamatsu.yj@renesas.com>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/uio/uio.c

index a673e5b6a2e0b7500cdf6f101b5467f4a8e58da2..e371f5af11f5b91c16d183b90649f64005ad58a7 100644 (file)
@@ -655,7 +655,7 @@ static int uio_mmap_physical(struct vm_area_struct *vma)
 
        if (mem->addr & ~PAGE_MASK)
                return -ENODEV;
-       if (vma->vm_end - vma->vm_start > mem->size)
+       if (vma->vm_end - vma->vm_start > PAGE_ALIGN(mem->size))
                return -EINVAL;
 
        vma->vm_ops = &uio_physical_vm_ops;