drm_file's object_idr uses 1 as base value, which can cause id
mismatch when trying to use DRM_IOCTL_GEM_CHANGE_HANDLE
to change id from 1 to 0.
Disallow 0 as new handle in that ioctl.
Fixes: 53096728b891 ("drm: Add DRM prime interface to reassign GEM handle")
Signed-off-by: Jan Sokolowski <[email protected]>
Cc: David Francis <[email protected]>
Cc: Maarten Lankhorst <[email protected]>
Cc: Maxime Ripard <[email protected]>
Cc: Thomas Zimmermann <[email protected]>
Cc: David Airlie <[email protected]>
Cc: Simona Vetter <[email protected]>
Cc: "Christian König" <[email protected]>
Cc: Felix Kuehling <[email protected]>
Cc: Lucas De Marchi <[email protected]>
---
drivers/gpu/drm/drm_gem.c | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
index 68168d58a7c8..2a49a8e396fa 100644
--- a/drivers/gpu/drm/drm_gem.c
+++ b/drivers/gpu/drm/drm_gem.c
@@ -975,6 +975,10 @@ int drm_gem_change_handle_ioctl(struct drm_device *dev,
void *data,
if (args->handle == args->new_handle)
return 0;
+ /* As the idr base is 1, trying to set handle 0 will create id mismatch
*/
+ if (args->new_handle == 0)
+ return 0;
+
mutex_lock(&file_priv->prime.lock);
spin_lock(&file_priv->table_lock);
--
2.43.0