]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
accel/ivpu: Disallow re-exporting imported GEM objects
authorKarol Wachowski <karol.wachowski@linux.intel.com>
Thu, 30 Apr 2026 09:56:44 +0000 (11:56 +0200)
committerKarol Wachowski <karol.wachowski@linux.intel.com>
Thu, 30 Apr 2026 11:51:37 +0000 (13:51 +0200)
Prevent re-exporting of imported GEM buffers by adding a custom
prime_handle_to_fd callback that checks if the object is imported
and returns -EOPNOTSUPP if so.

Re-exporting imported GEM buffers causes loss of buffer flags settings,
leading to incorrect device access and data corruption.

Reported-by: Yametsu <yam3tsu@gmail.com>
Fixes: 57557964b582 ("accel/ivpu: Add support for userptr buffer objects")
Reviewed-by: Andrzej Kacprowski <andrzej.kacprowski@linux.intel.com>
Signed-off-by: Karol Wachowski <karol.wachowski@linux.intel.com>
Cc: <stable@vger.kernel.org> # v6.19+
drivers/accel/ivpu/ivpu_drv.c

index 2801378e3e19271cea63880d67ba0130d134fb5e..3b7b008bccfec754cd8eaecdbd8e911afb8cf644 100644 (file)
@@ -537,6 +537,26 @@ static const struct file_operations ivpu_fops = {
 #endif
 };
 
+static int ivpu_gem_prime_handle_to_fd(struct drm_device *dev, struct drm_file *file_priv,
+                                      u32 handle, u32 flags, int *prime_fd)
+{
+       struct drm_gem_object *obj;
+
+       obj = drm_gem_object_lookup(file_priv, handle);
+       if (!obj)
+               return -ENOENT;
+
+       if (drm_gem_is_imported(obj)) {
+               /* Do not allow re-exporting */
+               drm_gem_object_put(obj);
+               return -EOPNOTSUPP;
+       }
+
+       drm_gem_object_put(obj);
+
+       return drm_gem_prime_handle_to_fd(dev, file_priv, handle, flags, prime_fd);
+}
+
 static const struct drm_driver driver = {
        .driver_features = DRIVER_GEM | DRIVER_COMPUTE_ACCEL,
 
@@ -545,6 +565,7 @@ static const struct drm_driver driver = {
 
        .gem_create_object = ivpu_gem_create_object,
        .gem_prime_import = ivpu_gem_prime_import,
+       .prime_handle_to_fd = ivpu_gem_prime_handle_to_fd,
 
        .ioctls = ivpu_drm_ioctls,
        .num_ioctls = ARRAY_SIZE(ivpu_drm_ioctls),