Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

accel/ivpu: Disallow re-exporting imported GEM objects

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+

+21
+21
drivers/accel/ivpu/ivpu_drv.c
··· 537 537 #endif 538 538 }; 539 539 540 + static int ivpu_gem_prime_handle_to_fd(struct drm_device *dev, struct drm_file *file_priv, 541 + u32 handle, u32 flags, int *prime_fd) 542 + { 543 + struct drm_gem_object *obj; 544 + 545 + obj = drm_gem_object_lookup(file_priv, handle); 546 + if (!obj) 547 + return -ENOENT; 548 + 549 + if (drm_gem_is_imported(obj)) { 550 + /* Do not allow re-exporting */ 551 + drm_gem_object_put(obj); 552 + return -EOPNOTSUPP; 553 + } 554 + 555 + drm_gem_object_put(obj); 556 + 557 + return drm_gem_prime_handle_to_fd(dev, file_priv, handle, flags, prime_fd); 558 + } 559 + 540 560 static const struct drm_driver driver = { 541 561 .driver_features = DRIVER_GEM | DRIVER_COMPUTE_ACCEL, 542 562 ··· 565 545 566 546 .gem_create_object = ivpu_gem_create_object, 567 547 .gem_prime_import = ivpu_gem_prime_import, 548 + .prime_handle_to_fd = ivpu_gem_prime_handle_to_fd, 568 549 569 550 .ioctls = ivpu_drm_ioctls, 570 551 .num_ioctls = ARRAY_SIZE(ivpu_drm_ioctls),