]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/v3d: Reject invalid indirect BO handle in indirect CSD setup
authorMaíra Canal <mcanal@igalia.com>
Fri, 3 Jul 2026 15:33:35 +0000 (12:33 -0300)
committerMaíra Canal <mcanal@igalia.com>
Tue, 7 Jul 2026 21:52:13 +0000 (18:52 -0300)
v3d_get_cpu_indirect_csd_params() looks up the indirect buffer object
from a userspace-supplied handle but never checks the result. A bogus
or stale handle makes drm_gem_object_lookup() return NULL, which is
then stored in info->indirect and only dereferenced later when the
indirect CSD job runs, turning a userspace mistake into a NULL pointer
dereference in the kernel.

Bail out with -ENOENT as soon as the lookup fails, so the bad handle is
rejected at submission time.

Fixes: 18b8413b25b7 ("drm/v3d: Create a CPU job extension for a indirect CSD job")
Reviewed-by: Iago Toral Quiroga <itoral@igalia.com>
Signed-off-by: Maíra Canal <mcanal@igalia.com>
Link: https://patch.msgid.link/20260703-v3d-cpu-job-fixes-v3-2-bc51b1f3eeb5@igalia.com
drivers/gpu/drm/v3d/v3d_submit.c

index 1db43c6a078d54a9306b456f24ffa2c9cbf4e8f1..7682b24f13ec51db7364242ebef22c6d88125f78 100644 (file)
@@ -495,6 +495,8 @@ v3d_get_cpu_indirect_csd_params(struct drm_file *file_priv,
               sizeof(indirect_csd.wg_uniform_offsets));
 
        info->indirect = drm_gem_object_lookup(file_priv, indirect_csd.indirect);
+       if (!info->indirect)
+               return -ENOENT;
 
        return v3d_setup_csd_jobs_and_bos(file_priv, v3d, &indirect_csd.submit,
                                          &info->job, &info->clean_job,