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

drm/vmwgfx: Do not allow invalid bpp's for dumb buffers

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

+15 -1
+15 -1
drivers/gpu/drm/vmwgfx/vmwgfx_bo.c
··· 807 807 { 808 808 struct vmw_private *dev_priv = vmw_priv(dev); 809 809 struct vmw_buffer_object *vbo; 810 + int cpp = DIV_ROUND_UP(args->bpp, 8); 810 811 int ret; 811 812 812 - args->pitch = args->width * ((args->bpp + 7) / 8); 813 + switch (cpp) { 814 + case 1: /* DRM_FORMAT_C8 */ 815 + case 2: /* DRM_FORMAT_RGB565 */ 816 + case 4: /* DRM_FORMAT_XRGB8888 */ 817 + break; 818 + default: 819 + /* 820 + * Dumb buffers don't allow anything else. 821 + * This is tested via IGT's dumb_buffers 822 + */ 823 + return -EINVAL; 824 + } 825 + 826 + args->pitch = args->width * cpp; 813 827 args->size = ALIGN(args->pitch * args->height, PAGE_SIZE); 814 828 815 829 ret = vmw_gem_object_create_with_handle(dev_priv, file_priv,