We need to reject the MAP op if offset+range is larger than the BO size.

Reported-by: Connor Abbott <cwabbo...@gmail.com>
Fixes: 2e6a8a1fe2b2 ("drm/msm: Add VM_BIND ioctl")
Signed-off-by: Rob Clark <robin.cl...@oss.qualcomm.com>
Tested-by: Connor Abbott <cwabbo...@gmail.com>
---
 drivers/gpu/drm/msm/msm_gem_vma.c | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/drivers/gpu/drm/msm/msm_gem_vma.c 
b/drivers/gpu/drm/msm/msm_gem_vma.c
index 209154be5efc..381a0853c05b 100644
--- a/drivers/gpu/drm/msm/msm_gem_vma.c
+++ b/drivers/gpu/drm/msm/msm_gem_vma.c
@@ -1080,6 +1080,12 @@ vm_bind_job_lookup_ops(struct msm_vm_bind_job *job, 
struct drm_msm_vm_bind *args
 
                op->obj = obj;
                cnt++;
+
+               if ((op->range + op->obj_offset) > obj->size) {
+                       ret = UERR(EINVAL, dev, "invalid range: %016llx + 
%016llx > %016zx\n",
+                                  op->range, op->obj_offset, obj->size);
+                       goto out_unlock;
+               }
        }
 
        *nr_bos = cnt;
-- 
2.50.1

Reply via email to