drm/vmwgfx: Do not allow invalid bpp's for dumb buffers
authorZack Rusin <zackr@vmware.com>
Sat, 22 Oct 2022 04:02:31 +0000 (00:02 -0400)
committerZack Rusin <zackr@vmware.com>
Tue, 25 Oct 2022 16:42:27 +0000 (12:42 -0400)
Dumb buffers allow a very limited set of formats. Basically everything
apart from 1, 2 and 4 is expected to return an error. Make vmwgfx
follow those guidelines.

This fixes igt's dumb_buffer invalid_bpp test on vmwgfx.

Signed-off-by: Zack Rusin <zackr@vmware.com>
Reviewed-by: Martin Krastev <krastevm@vmware.com>
Reviewed-by: Maaz Mombasawala <mombasawalam@vmware.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20221022040236.616490-13-zack@kde.org
drivers/gpu/drm/vmwgfx/vmwgfx_bo.c

index 822251a..d218b15 100644 (file)
@@ -807,9 +807,23 @@ int vmw_dumb_create(struct drm_file *file_priv,
 {
        struct vmw_private *dev_priv = vmw_priv(dev);
        struct vmw_buffer_object *vbo;
+       int cpp = DIV_ROUND_UP(args->bpp, 8);
        int ret;
 
-       args->pitch = args->width * ((args->bpp + 7) / 8);
+       switch (cpp) {
+       case 1: /* DRM_FORMAT_C8 */
+       case 2: /* DRM_FORMAT_RGB565 */
+       case 4: /* DRM_FORMAT_XRGB8888 */
+               break;
+       default:
+               /*
+                * Dumb buffers don't allow anything else.
+                * This is tested via IGT's dumb_buffers
+                */
+               return -EINVAL;
+       }
+
+       args->pitch = args->width * cpp;
        args->size = ALIGN(args->pitch * args->height, PAGE_SIZE);
 
        ret = vmw_gem_object_create_with_handle(dev_priv, file_priv,