All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] drm/i915/gvt: Fix mmap range check
@ 2019-01-11  5:58 Zhenyu Wang
  2019-01-15 10:55 ` Yuan, Hang
       [not found] ` <20190116133557.4158F20866@mail.kernel.org>
  0 siblings, 2 replies; 3+ messages in thread
From: Zhenyu Wang @ 2019-01-11  5:58 UTC (permalink / raw)
  To: intel-gvt-dev; +Cc: Monroy, Rodrigo Axel, Orrala Contreras, Alfredo, stable

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@intel.com>
Cc: "Orrala Contreras, Alfredo" <alfredo.orrala.contreras@intel.com>
Cc: stable@vger.kernel.org # v4.10+
Signed-off-by: Zhenyu Wang <zhenyuw@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


^ permalink raw reply related	[flat|nested] 3+ messages in thread

* RE: [PATCH] drm/i915/gvt: Fix mmap range check
  2019-01-11  5:58 [PATCH] drm/i915/gvt: Fix mmap range check Zhenyu Wang
@ 2019-01-15 10:55 ` Yuan, Hang
       [not found] ` <20190116133557.4158F20866@mail.kernel.org>
  1 sibling, 0 replies; 3+ messages in thread
From: Yuan, Hang @ 2019-01-15 10:55 UTC (permalink / raw)
  To: Zhenyu Wang, intel-gvt-dev
  Cc: Monroy, Rodrigo Axel, Orrala Contreras, Alfredo, stable

Looks fine to me. Thanks.

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

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

^ permalink raw reply	[flat|nested] 3+ messages in thread

* Re: [PATCH] drm/i915/gvt: Fix mmap range check
       [not found] ` <20190116133557.4158F20866@mail.kernel.org>
@ 2019-01-17  7:12   ` Zhenyu Wang
  0 siblings, 0 replies; 3+ messages in thread
From: Zhenyu Wang @ 2019-01-17  7:12 UTC (permalink / raw)
  To: Sasha Levin
  Cc: intel-gvt-dev, Monroy, Rodrigo Axel, Orrala Contreras, Alfredo, stable

[-- Attachment #1: Type: text/plain, Size: 844 bytes --]

On 2019.01.16 13:35:56 +0000, Sasha Levin wrote:
> Hi,
> 
> [This is an automated email]
> 
> This commit has been processed because it contains a "Fixes:" tag,
> fixing commit: 659643f7d814 drm/i915/gvt/kvmgt: add vfio/mdev support to KVMGT.
> 
> The bot has tested the following trees: v4.20.2, v4.19.15, v4.14.93.
> 
> v4.20.2: Build OK!
> v4.19.15: Build OK!
> v4.14.93: Build failed! Errors:
>     drivers/gpu/drm/i915/gvt/kvmgt.c:836:7: error: implicit declaration of function ???intel_vgpu_in_aperture???; did you mean ???intel_vgpu_create???? [-Werror=implicit-function-declaration]
> 
> 
> How should we proceed with this patch?
>

I'll prepare a backport version once this one hits linux master.

Thanks.

-- 
Open Source Technology Center, Intel ltd.

$gpg --keyserver wwwkeys.pgp.net --recv-keys 4D781827

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 195 bytes --]

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2019-01-17  7:24 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-01-11  5:58 [PATCH] drm/i915/gvt: Fix mmap range check Zhenyu Wang
2019-01-15 10:55 ` Yuan, Hang
     [not found] ` <20190116133557.4158F20866@mail.kernel.org>
2019-01-17  7:12   ` Zhenyu Wang

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.