[PATCH] drm/i915/gvt: Fix mmap range check
Yuan, Hang
hang.yuan at intel.com
Tue Jan 15 10:55:51 UTC 2019
Looks fine to me. Thanks.
Reviewed-by: Hang Yuan <hang.yuan at intel.com>
> -----Original Message-----
> From: intel-gvt-dev [mailto:intel-gvt-dev-bounces at lists.freedesktop.org] On
> Behalf Of Zhenyu Wang
> Sent: Friday, January 11, 2019 1:59 PM
> To: intel-gvt-dev at lists.freedesktop.org
> Cc: Monroy, Rodrigo Axel <rodrigo.axel.monroy at intel.com>; Orrala
> Contreras, Alfredo <alfredo.orrala.contreras at intel.com>;
> stable at vger.kernel.org
> Subject: [PATCH] drm/i915/gvt: Fix mmap range check
>
> This is to fix missed mmap range check on vGPU bar2 region and only allow
> to map vGPU allocated GMADDR range, which means user space should
> support sparse mmap to get proper offset for mmap vGPU aperture. And
> this takes care of actual pgoff in mmap request as original code always does
> from beginning of vGPU aperture.
>
> Fixes: 659643f7d814 ("drm/i915/gvt/kvmgt: add vfio/mdev support to
> KVMGT")
> Cc: "Monroy, Rodrigo Axel" <rodrigo.axel.monroy at intel.com>
> Cc: "Orrala Contreras, Alfredo" <alfredo.orrala.contreras at intel.com>
> Cc: stable at vger.kernel.org # v4.10+
> Signed-off-by: Zhenyu Wang <zhenyuw at linux.intel.com>
> ---
> drivers/gpu/drm/i915/gvt/kvmgt.c | 14 ++++++++++++--
> 1 file changed, 12 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/gvt/kvmgt.c
> b/drivers/gpu/drm/i915/gvt/kvmgt.c
> index a19e684e621a..5488c2e2a3ff 100644
> --- a/drivers/gpu/drm/i915/gvt/kvmgt.c
> +++ b/drivers/gpu/drm/i915/gvt/kvmgt.c
> @@ -1005,7 +1005,7 @@ static int intel_vgpu_mmap(struct mdev_device
> *mdev, struct vm_area_struct *vma) {
> unsigned int index;
> u64 virtaddr;
> - unsigned long req_size, pgoff = 0;
> + unsigned long req_size, pgoff, req_start;
> pgprot_t pg_prot;
> struct intel_vgpu *vgpu = mdev_get_drvdata(mdev);
>
> @@ -1023,7 +1023,17 @@ static int intel_vgpu_mmap(struct mdev_device
> *mdev, struct vm_area_struct *vma)
> pg_prot = vma->vm_page_prot;
> virtaddr = vma->vm_start;
> req_size = vma->vm_end - vma->vm_start;
> - pgoff = vgpu_aperture_pa_base(vgpu) >> PAGE_SHIFT;
> + pgoff = vma->vm_pgoff &
> + ((1U << (VFIO_PCI_OFFSET_SHIFT - PAGE_SHIFT)) - 1);
> + req_start = pgoff << PAGE_SHIFT;
> +
> + if (!intel_vgpu_in_aperture(vgpu, req_start))
> + return -EINVAL;
> + if (req_start + req_size >
> + vgpu_aperture_offset(vgpu) + vgpu_aperture_sz(vgpu))
> + return -EINVAL;
> +
> + pgoff = (gvt_aperture_pa_base(vgpu->gvt) >> PAGE_SHIFT) + pgoff;
>
> return remap_pfn_range(vma, virtaddr, pgoff, req_size, pg_prot); }
> --
> 2.19.1
>
> _______________________________________________
> intel-gvt-dev mailing list
> intel-gvt-dev at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev
More information about the intel-gvt-dev
mailing list