* [PATCH v2 0/3] drm/msm/gem: A couple VM_BIND fixes
@ 2026-11-02 16:09 Rob Clark
2026-11-02 16:09 ` [PATCH v2 1/3] drm/msm/gem: Fix VM_BIND range check Rob Clark
` (2 more replies)
0 siblings, 3 replies; 4+ messages in thread
From: Rob Clark @ 2026-11-02 16:09 UTC (permalink / raw)
To: dri-devel
Cc: linux-arm-msm, freedreno, Rob Clark, Abhinav Kumar, David Airlie,
Dmitry Baryshkov, Jessica Zhang, open list, Marijn Suijten,
Sean Paul, Simona Vetter
Fix possible overflow in range check, and disallow passing BOs table to
GEM_SUBMIT for VM_BIND contexts.
v2:
- Also check that range/obj_offset are not greater than SIZE_MAX. It
doesn't matter currently, but would if an armv7 system ever added
support for per-process pgtables and VM_BIND.
- Add patch to fix handle-dereference in idr_find() error path
- Link to v1: https://lore.kernel.org/all/20261101174911.25184-1-robin.clark@oss.qualcomm.com/
Rob Clark (3):
drm/msm/gem: Fix VM_BIND range check
drm/msm/gem: Disallow nr_bos for VM_BIND contexts
drm/msm/gem: Decrement loop idx if handle lookup fails
drivers/gpu/drm/msm/msm_gem_submit.c | 5 ++++-
drivers/gpu/drm/msm/msm_gem_vma.c | 7 ++++---
2 files changed, 8 insertions(+), 4 deletions(-)
--
2.56.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 1/3] drm/msm/gem: Fix VM_BIND range check
2026-11-02 16:09 [PATCH v2 0/3] drm/msm/gem: A couple VM_BIND fixes Rob Clark
@ 2026-11-02 16:09 ` Rob Clark
2026-11-02 16:10 ` [PATCH v2 2/3] drm/msm/gem: Disallow nr_bos for VM_BIND contexts Rob Clark
2026-11-02 16:10 ` [PATCH v2 3/3] drm/msm/gem: Decrement loop idx if handle lookup fails Rob Clark
2 siblings, 0 replies; 4+ messages in thread
From: Rob Clark @ 2026-11-02 16:09 UTC (permalink / raw)
To: dri-devel
Cc: linux-arm-msm, freedreno, Rob Clark, Konrad Dybcio,
Dmitry Baryshkov, Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang,
Sean Paul, Marijn Suijten, David Airlie, Simona Vetter,
open list
Use size_add() to guard against overflow.
Reported-by: Konrad Dybcio <konrad.dybcio@oss.qualcomm.com>
Fixes: 3a3bef68a6c1 ("drm/msm: Fix missing VM_BIND offset/range validation")
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
---
drivers/gpu/drm/msm/msm_gem_vma.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/gpu/drm/msm/msm_gem_vma.c b/drivers/gpu/drm/msm/msm_gem_vma.c
index f687a629629d..922285537dee 100644
--- a/drivers/gpu/drm/msm/msm_gem_vma.c
+++ b/drivers/gpu/drm/msm/msm_gem_vma.c
@@ -1012,10 +1012,10 @@ lookup_op(struct msm_vm_bind_job *job, const struct drm_msm_vm_bind_op *op)
if (invalid_alignment(op->iova))
ret = UERR(EINVAL, dev, "invalid address: %016llx\n", op->iova);
- if (invalid_alignment(op->obj_offset))
+ if (invalid_alignment(op->obj_offset) || (op->obj_offset > SIZE_MAX))
ret = UERR(EINVAL, dev, "invalid bo_offset: %016llx\n", op->obj_offset);
- if (invalid_alignment(op->range))
+ if (invalid_alignment(op->range) || (op->range > SIZE_MAX))
ret = UERR(EINVAL, dev, "invalid range: %016llx\n", op->range);
if (!drm_gpuvm_range_valid(job->vm, op->iova, op->range))
@@ -1118,7 +1118,7 @@ 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) {
+ if (size_add(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;
--
2.56.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 2/3] drm/msm/gem: Disallow nr_bos for VM_BIND contexts
2026-11-02 16:09 [PATCH v2 0/3] drm/msm/gem: A couple VM_BIND fixes Rob Clark
2026-11-02 16:09 ` [PATCH v2 1/3] drm/msm/gem: Fix VM_BIND range check Rob Clark
@ 2026-11-02 16:10 ` Rob Clark
2026-11-02 16:10 ` [PATCH v2 3/3] drm/msm/gem: Decrement loop idx if handle lookup fails Rob Clark
2 siblings, 0 replies; 4+ messages in thread
From: Rob Clark @ 2026-11-02 16:10 UTC (permalink / raw)
To: dri-devel
Cc: linux-arm-msm, freedreno, Rob Clark, Dmitry Baryshkov,
Dmitry Baryshkov, Abhinav Kumar, Jessica Zhang, Sean Paul,
Marijn Suijten, David Airlie, Simona Vetter, open list
If using VM_BIND, it is invalid to attach BOs to a GEM_SUBMIT ioctl.
Only the VM_BIND ioctl should be used for binding objects.
Fixes: 2e6a8a1fe2b2 ("drm/msm: Add VM_BIND ioctl")
Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com>
Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
---
drivers/gpu/drm/msm/msm_gem_submit.c | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/msm/msm_gem_submit.c b/drivers/gpu/drm/msm/msm_gem_submit.c
index ff6cf39587c9..b558d07ed2b6 100644
--- a/drivers/gpu/drm/msm/msm_gem_submit.c
+++ b/drivers/gpu/drm/msm/msm_gem_submit.c
@@ -272,7 +272,7 @@ static int submit_lock_objects_vmbind(struct msm_gem_submit *submit)
struct drm_exec *exec = &submit->exec;
int ret = 0;
- drm_exec_init(&submit->exec, flags, submit->nr_bos);
+ drm_exec_init(&submit->exec, flags, 0);
submit->has_exec = true;
drm_exec_until_all_locked (&submit->exec) {
@@ -589,6 +589,9 @@ int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
return -EINVAL;
}
+ if (msm_context_is_vmbind(ctx) && args->nr_bos)
+ return UERR(EINVAL, dev, "invalid nr_bos, must be zero for VM_BIND contexts");
+
queue = msm_submitqueue_get(ctx, args->queueid);
if (!queue)
return -ENOENT;
--
2.56.0
^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH v2 3/3] drm/msm/gem: Decrement loop idx if handle lookup fails
2026-11-02 16:09 [PATCH v2 0/3] drm/msm/gem: A couple VM_BIND fixes Rob Clark
2026-11-02 16:09 ` [PATCH v2 1/3] drm/msm/gem: Fix VM_BIND range check Rob Clark
2026-11-02 16:10 ` [PATCH v2 2/3] drm/msm/gem: Disallow nr_bos for VM_BIND contexts Rob Clark
@ 2026-11-02 16:10 ` Rob Clark
2 siblings, 0 replies; 4+ messages in thread
From: Rob Clark @ 2026-11-02 16:10 UTC (permalink / raw)
To: dri-devel
Cc: linux-arm-msm, freedreno, Rob Clark, Dmitry Baryshkov,
Abhinav Kumar, Jessica Zhang, Sean Paul, Marijn Suijten,
David Airlie, Simona Vetter, open list
In the out_unlock unlock loop, we should skip the op which still has the
gem handle instead of gem obj ptr.
Fixes: 2e6a8a1fe2b2 ("drm/msm: Add VM_BIND ioctl")
Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
---
drivers/gpu/drm/msm/msm_gem_vma.c | 1 +
1 file changed, 1 insertion(+)
diff --git a/drivers/gpu/drm/msm/msm_gem_vma.c b/drivers/gpu/drm/msm/msm_gem_vma.c
index 922285537dee..4413db0644a2 100644
--- a/drivers/gpu/drm/msm/msm_gem_vma.c
+++ b/drivers/gpu/drm/msm/msm_gem_vma.c
@@ -1110,6 +1110,7 @@ vm_bind_job_lookup_ops(struct msm_vm_bind_job *job, struct drm_msm_vm_bind *args
obj = idr_find(&file->object_idr, op->handle);
if (!obj) {
ret = UERR(EINVAL, dev, "invalid handle %u at index %u\n", op->handle, i);
+ i--;
goto out_unlock;
}
--
2.56.0
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2026-11-02 16:10 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-11-02 16:09 [PATCH v2 0/3] drm/msm/gem: A couple VM_BIND fixes Rob Clark
2026-11-02 16:09 ` [PATCH v2 1/3] drm/msm/gem: Fix VM_BIND range check Rob Clark
2026-11-02 16:10 ` [PATCH v2 2/3] drm/msm/gem: Disallow nr_bos for VM_BIND contexts Rob Clark
2026-11-02 16:10 ` [PATCH v2 3/3] drm/msm/gem: Decrement loop idx if handle lookup fails Rob Clark
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®