Commit f31fdf51 authored by Jeremy Fitzhardinge's avatar Jeremy Fitzhardinge

xen/privcmd: make sure vma is ours before doing anything to it

Test vma->vm_ops is our operations to make sure we created it.
We don't want to stomp on other random vmas.

[ Impact: bugfix; prevent ioctl from affecting other mappings ]
Signed-off-by: default avatarJeremy Fitzhardinge <jeremy.fitzhardinge@citrix.com>
parent 441c7416
...@@ -310,6 +310,8 @@ static int mmap_return_errors(void *data, void *state) ...@@ -310,6 +310,8 @@ static int mmap_return_errors(void *data, void *state)
return 0; return 0;
} }
static struct vm_operations_struct privcmd_vm_ops;
static long privcmd_ioctl_mmap_batch(void __user *udata) static long privcmd_ioctl_mmap_batch(void __user *udata)
{ {
int ret; int ret;
...@@ -341,6 +343,7 @@ static long privcmd_ioctl_mmap_batch(void __user *udata) ...@@ -341,6 +343,7 @@ static long privcmd_ioctl_mmap_batch(void __user *udata)
vma = find_vma(mm, m.addr); vma = find_vma(mm, m.addr);
ret = -EINVAL; ret = -EINVAL;
if (!vma || if (!vma ||
vma->vm_ops != &privcmd_vm_ops ||
(m.addr != vma->vm_start) || (m.addr != vma->vm_start) ||
((m.addr + (nr_pages << PAGE_SHIFT)) != vma->vm_end) || ((m.addr + (nr_pages << PAGE_SHIFT)) != vma->vm_end) ||
!privcmd_enforce_singleshot_mapping(vma)) { !privcmd_enforce_singleshot_mapping(vma)) {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment