Skip to content

Commit b655028

Browse files
committed
uio: we cannot mmap unaligned page contents
In commit 7314e61 ("Fix a few incorrectly checked [io_]remap_pfn_range() calls") the uio driver started more properly checking the passed-in user mapping arguments against the size of the actual uio driver data. That in turn exposed that some driver authors apparently didn't realize that mmap can only work on a page granularity, and had tried to use it with smaller mappings, with the new size check catching that out. So since it's not just the user mmap() arguments that can be confused, make the uio mmap code also verify that the uio driver has the memory allocated at page boundaries in order for mmap to work. If the device memory isn't properly aligned, we return [ENODEV] The fildes argument refers to a file whose type is not supported by mmap(). as per the open group documentation on mmap. Reported-by: Holger Brunck <holger.brunck@keymile.com> Acked-by: Greg KH <gregkh@linuxfoundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
1 parent a45299e commit b655028

File tree

1 file changed

+2
-0
lines changed

1 file changed

+2
-0
lines changed

drivers/uio/uio.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,8 @@ static int uio_mmap_physical(struct vm_area_struct *vma)
653653
return -EINVAL;
654654
mem = idev->info->mem + mi;
655655

656+
if (mem->addr & ~PAGE_MASK)
657+
return -ENODEV;
656658
if (vma->vm_end - vma->vm_start > mem->size)
657659
return -EINVAL;
658660

0 commit comments

Comments
 (0)