diff options
author | Peter Maydell <peter.maydell@linaro.org> | 2021-06-16 14:32:43 +0100 |
---|---|---|
committer | Peter Maydell <peter.maydell@linaro.org> | 2021-06-16 14:32:43 +0100 |
commit | e3897b75fd2ac8c4bfda95d60309cb6414da8000 (patch) | |
tree | ce7a8e70732b9d71563d363510b27b4eb51bae7e | |
parent | 1dd259ae24a26d8a987ab83aefb5c04dbe5f4b2a (diff) | |
parent | 4fa7b4cc500e1fbd8c11e65548b7713db81e75ff (diff) |
Merge remote-tracking branch 'remotes/kraxel/tags/vga-20210615-pull-request' into staging
vga: fixes for stdvga, vhost-user-gpu and virtio-gpu.
# gpg: Signature made Tue 15 Jun 2021 18:40:11 BST
# gpg: using RSA key A0328CFFB93A17A79901FE7D4CB6D8EED3E87138
# gpg: Good signature from "Gerd Hoffmann (work) <kraxel@redhat.com>" [full]
# gpg: aka "Gerd Hoffmann <gerd@kraxel.org>" [full]
# gpg: aka "Gerd Hoffmann (private) <kraxel@gmail.com>" [full]
# Primary key fingerprint: A032 8CFF B93A 17A7 9901 FE7D 4CB6 D8EE D3E8 7138
* remotes/kraxel/tags/vga-20210615-pull-request:
virtio-gpu: move scanout_id sanity check
vhost-user-gpu: reorder free calls.
vga: Allow writing VBE_DISPI_ID5 to ID register
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
-rw-r--r-- | contrib/vhost-user-gpu/vhost-user-gpu.c | 2 | ||||
-rw-r--r-- | hw/display/vga.c | 3 | ||||
-rw-r--r-- | hw/display/virtio-gpu.c | 20 |
3 files changed, 17 insertions, 8 deletions
diff --git a/contrib/vhost-user-gpu/vhost-user-gpu.c b/contrib/vhost-user-gpu/vhost-user-gpu.c index 6dc6a44f4e..611360e6b4 100644 --- a/contrib/vhost-user-gpu/vhost-user-gpu.c +++ b/contrib/vhost-user-gpu/vhost-user-gpu.c @@ -350,8 +350,8 @@ vg_resource_create_2d(VuGpu *g, if (!res->image) { g_critical("%s: resource creation failed %d %d %d", __func__, c2d.resource_id, c2d.width, c2d.height); - g_free(res); vugbm_buffer_destroy(&res->buffer); + g_free(res); cmd->error = VIRTIO_GPU_RESP_ERR_OUT_OF_MEMORY; return; } diff --git a/hw/display/vga.c b/hw/display/vga.c index 28a90e30d0..9d1f66af40 100644 --- a/hw/display/vga.c +++ b/hw/display/vga.c @@ -752,7 +752,8 @@ void vbe_ioport_write_data(void *opaque, uint32_t addr, uint32_t val) val == VBE_DISPI_ID1 || val == VBE_DISPI_ID2 || val == VBE_DISPI_ID3 || - val == VBE_DISPI_ID4) { + val == VBE_DISPI_ID4 || + val == VBE_DISPI_ID5) { s->vbe_regs[s->vbe_index] = val; } break; diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c index 4d549377cb..e183f4ecda 100644 --- a/hw/display/virtio-gpu.c +++ b/hw/display/virtio-gpu.c @@ -610,12 +610,6 @@ static void virtio_gpu_do_set_scanout(VirtIOGPU *g, struct virtio_gpu_scanout *scanout; uint8_t *data; - if (scanout_id >= g->parent_obj.conf.max_outputs) { - qemu_log_mask(LOG_GUEST_ERROR, "%s: illegal scanout id specified %d", - __func__, scanout_id); - *error = VIRTIO_GPU_RESP_ERR_INVALID_SCANOUT_ID; - return; - } scanout = &g->parent_obj.scanout[scanout_id]; if (r->x > fb->width || @@ -694,6 +688,13 @@ static void virtio_gpu_set_scanout(VirtIOGPU *g, trace_virtio_gpu_cmd_set_scanout(ss.scanout_id, ss.resource_id, ss.r.width, ss.r.height, ss.r.x, ss.r.y); + if (ss.scanout_id >= g->parent_obj.conf.max_outputs) { + qemu_log_mask(LOG_GUEST_ERROR, "%s: illegal scanout id specified %d", + __func__, ss.scanout_id); + cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_SCANOUT_ID; + return; + } + if (ss.resource_id == 0) { virtio_gpu_disable_scanout(g, ss.scanout_id); return; @@ -730,6 +731,13 @@ static void virtio_gpu_set_scanout_blob(VirtIOGPU *g, ss.r.width, ss.r.height, ss.r.x, ss.r.y); + if (ss.scanout_id >= g->parent_obj.conf.max_outputs) { + qemu_log_mask(LOG_GUEST_ERROR, "%s: illegal scanout id specified %d", + __func__, ss.scanout_id); + cmd->error = VIRTIO_GPU_RESP_ERR_INVALID_SCANOUT_ID; + return; + } + if (ss.resource_id == 0) { virtio_gpu_disable_scanout(g, ss.scanout_id); return; |