Skip to content

Commit

Permalink
drm/virtio: fix bounds check in virtio_gpu_cmd_get_capset()
Browse files Browse the repository at this point in the history
This doesn't affect runtime because in the current code "idx" is always
valid.

First, we read from "vgdev->capsets[idx].max_size" before checking
whether "idx" is within bounds.  And secondly the bounds check is off by
one so we could end up reading one element beyond the end of the
vgdev->capsets[] array.

Fixes: 62fb7a5 ("virtio-gpu: add 3d/virgl support")
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20180704094250.m7sgvvzg3dhcvv3h@kili.mountain
Signed-off-by: Gerd Hoffmann <kraxel@redhat.com>
  • Loading branch information
Dan Carpenter authored and Gerd Hoffmann committed Aug 30, 2018
1 parent 0e7a3d4 commit 09c4b49
Showing 1 changed file with 3 additions and 2 deletions.
5 changes: 3 additions & 2 deletions drivers/gpu/drm/virtio/virtgpu_vq.c
Original file line number Diff line number Diff line change
Expand Up @@ -648,11 +648,11 @@ int virtio_gpu_cmd_get_capset(struct virtio_gpu_device *vgdev,
{
struct virtio_gpu_get_capset *cmd_p;
struct virtio_gpu_vbuffer *vbuf;
int max_size = vgdev->capsets[idx].max_size;
int max_size;
struct virtio_gpu_drv_cap_cache *cache_ent;
void *resp_buf;

if (idx > vgdev->num_capsets)
if (idx >= vgdev->num_capsets)
return -EINVAL;

if (version > vgdev->capsets[idx].max_version)
Expand All @@ -662,6 +662,7 @@ int virtio_gpu_cmd_get_capset(struct virtio_gpu_device *vgdev,
if (!cache_ent)
return -ENOMEM;

max_size = vgdev->capsets[idx].max_size;
cache_ent->caps_cache = kmalloc(max_size, GFP_KERNEL);
if (!cache_ent->caps_cache) {
kfree(cache_ent);
Expand Down

0 comments on commit 09c4b49

Please sign in to comment.