drm/virtio: Fix NULL dereference error in virtio_gpu_poll
authorVivek Kasireddy <vivek.kasireddy@intel.com>
Thu, 4 Nov 2021 21:42:49 +0000 (14:42 -0700)
committerGerd Hoffmann <kraxel@redhat.com>
Mon, 8 Nov 2021 12:54:41 +0000 (13:54 +0100)
When virgl is not enabled, vfpriv pointer would not be allocated.
Therefore, check for a valid value before dereferencing.

Reported-by: Christian Zigotzky <chzigotzky@xenosoft.de>
Cc: Gurchetan Singh <gurchetansingh@chromium.org>
Cc: Gerd Hoffmann <kraxel@redhat.com>
Signed-off-by: Vivek Kasireddy <vivek.kasireddy@intel.com>
Tested-by: Christian Zigotzky <chzigotzky@xenosoft.de>
Link: http://patchwork.freedesktop.org/patch/msgid/20211104214249.1802789-1-vivek.kasireddy@intel.com
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
drivers/gpu/drm/virtio/virtgpu_drv.c

index 749db18dcfa21227472cae71be08b82e33965770..d86e1ad4a97260b82895d98bbb2feef93ef2ca7f 100644 (file)
@@ -163,10 +163,11 @@ static __poll_t virtio_gpu_poll(struct file *filp,
        struct drm_file *drm_file = filp->private_data;
        struct virtio_gpu_fpriv *vfpriv = drm_file->driver_priv;
        struct drm_device *dev = drm_file->minor->dev;
+       struct virtio_gpu_device *vgdev = dev->dev_private;
        struct drm_pending_event *e = NULL;
        __poll_t mask = 0;
 
-       if (!vfpriv->ring_idx_mask)
+       if (!vgdev->has_virgl_3d || !vfpriv || !vfpriv->ring_idx_mask)
                return drm_poll(filp, wait);
 
        poll_wait(filp, &drm_file->event_wait, wait);