lkml.org 
[lkml]   [2009]   [Mar]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 37/61] UIO: Take offset into account when determining number of pages that can be mapped
    Date
    From: Ian Abbott <abbotti@mev.co.uk>

    If a UIO memory region does not start on a page boundary but straddles one,
    the number of actual pages that overlap the memory region may be calculated
    incorrectly because the offset isn't taken into account. If userspace sets
    the mmap length to offset+size, it may fail with -EINVAL if UIO thinks it's
    trying to allocate too many pages.

    Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
    Cc: Hans J. Koch <hjk@linutronix.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
    ---
    drivers/uio/uio.c | 3 ++-
    1 files changed, 2 insertions(+), 1 deletions(-)

    diff --git a/drivers/uio/uio.c b/drivers/uio/uio.c
    index 68a4965..03efb06 100644
    --- a/drivers/uio/uio.c
    +++ b/drivers/uio/uio.c
    @@ -708,7 +708,8 @@ static int uio_mmap(struct file *filep, struct vm_area_struct *vma)
    return -EINVAL;

    requested_pages = (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
    - actual_pages = (idev->info->mem[mi].size + PAGE_SIZE -1) >> PAGE_SHIFT;
    + actual_pages = ((idev->info->mem[mi].addr & ~PAGE_MASK)
    + + idev->info->mem[mi].size + PAGE_SIZE -1) >> PAGE_SHIFT;
    if (requested_pages > actual_pages)
    return -EINVAL;

    --
    1.6.2


    \
     
     \ /
      Last update: 2009-03-25 01:55    [W:2.417 / U:0.812 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site