RE: [PATCH] drm/i915/gvt: Fix mmap range check

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Looks fine to me. Thanks.

Reviewed-by: Hang Yuan <hang.yuan@xxxxxxxxx>

> -----Original Message-----
> From: intel-gvt-dev [mailto:intel-gvt-dev-bounces@xxxxxxxxxxxxxxxxxxxxx] On
> Behalf Of Zhenyu Wang
> Sent: Friday, January 11, 2019 1:59 PM
> To: intel-gvt-dev@xxxxxxxxxxxxxxxxxxxxx
> Cc: Monroy, Rodrigo Axel <rodrigo.axel.monroy@xxxxxxxxx>; Orrala
> Contreras, Alfredo <alfredo.orrala.contreras@xxxxxxxxx>;
> stable@xxxxxxxxxxxxxxx
> 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@xxxxxxxxx>
> Cc: "Orrala Contreras, Alfredo" <alfredo.orrala.contreras@xxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx # v4.10+
> Signed-off-by: Zhenyu Wang <zhenyuw@xxxxxxxxxxxxxxx>
> ---
>  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@xxxxxxxxxxxxxxxxxxxxx
> https://lists.freedesktop.org/mailman/listinfo/intel-gvt-dev




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux