On 2/25/2025 12:55 AM, Tomeu Vizoso wrote:
+int rocket_ioctl_fini_bo(struct drm_device *dev, void *data, struct drm_file 
*file)
+{
+       struct drm_rocket_fini_bo *args = data;
+       struct drm_gem_object *gem_obj;
+       struct rocket_gem_object *rkt_obj;
+       struct drm_gem_shmem_object *shmem_obj;
+       struct rocket_device *rdev = to_rocket_device(dev);
+
+       gem_obj = drm_gem_object_lookup(file, args->handle);
+       if (!gem_obj)
+               return -ENOENT;
+
+       rkt_obj = to_rocket_bo(gem_obj);
+       shmem_obj = &rkt_obj->base;
+
+       WARN_ON(rkt_obj->last_cpu_prep_op == 0);
+
+       for (unsigned int core = 1; core < rdev->num_cores; core++) {
+               dma_sync_sgtable_for_device(rdev->cores[core].dev, 
shmem_obj->sgt,
+                                           
rocket_op_to_dma_dir(rkt_obj->last_cpu_prep_op));
+       }
+
+       rkt_obj->last_cpu_prep_op = 0;
+
+       drm_gem_object_put(gem_obj);
+
+       return 0;
+}

flags must be 0, and you must check that here. You do not appear to be doing that. Otherwise, userspace may put a value in flags, which is ignored now, but later when you define flags for a purpose, existing userspace will be broken - a uapi violation.

Reply via email to