[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [Xen-changelog] [xen-unstable] Fix privcmd mmap() on 64b architectures for regions larger than 2GB.
# HG changeset patch # User kfraser@xxxxxxxxxxxxxxxxxxxxx # Node ID d13809a631b0d10e174c03911b583530387dd42b # Parent ec45c27c1500541be162d1326e4bb3b1ca5d7aba Fix privcmd mmap() on 64b architectures for regions larger than 2GB. Signed-off-by: Xin Li <xin.b.li@xxxxxxxxx> Signed-off-by: Keir Fraser <keir@xxxxxxxxxxxxx> --- linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c | 7 ++++--- 1 files changed, 4 insertions(+), 3 deletions(-) diff -r ec45c27c1500 -r d13809a631b0 linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c --- a/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c Thu Oct 12 14:14:58 2006 +0100 +++ b/linux-2.6-xen-sparse/drivers/xen/privcmd/privcmd.c Thu Oct 12 14:25:51 2006 +0100 @@ -139,7 +139,7 @@ static int privcmd_ioctl(struct inode *i /* Do not allow range to wrap the address space. */ rc = -EINVAL; - if ((msg.npages > (INT_MAX >> PAGE_SHIFT)) || + if ((msg.npages > (LONG_MAX >> PAGE_SHIFT)) || ((unsigned long)(msg.npages << PAGE_SHIFT) >= -va)) goto mmap_out; @@ -183,7 +183,7 @@ static int privcmd_ioctl(struct inode *i if (copy_from_user(&m, udata, sizeof(m))) return -EFAULT; - if ((m.num <= 0) || (m.num > (INT_MAX >> PAGE_SHIFT))) + if ((m.num <= 0) || (m.num > (LONG_MAX >> PAGE_SHIFT))) return -EINVAL; down_read(&mm->mmap_sem); @@ -191,7 +191,8 @@ static int privcmd_ioctl(struct inode *i vma = find_vma(mm, m.addr); if (!vma || (m.addr != vma->vm_start) || - ((m.addr + (m.num<<PAGE_SHIFT)) != vma->vm_end) || + ((m.addr + ((unsigned long)m.num<<PAGE_SHIFT)) != + vma->vm_end) || !privcmd_enforce_singleshot_mapping(vma)) { up_read(&mm->mmap_sem); return -EINVAL; _______________________________________________ Xen-changelog mailing list Xen-changelog@xxxxxxxxxxxxxxxxxxx http://lists.xensource.com/xen-changelog
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |