> The virtio specification allows creating a blob without backing storage
> attached. However, virtio-gpu attempts to create an empty udmabuf for
> such a blob. The ioctl fails with EINVAL and emits a spurious warning.
> Avoid the invalid ioctl.
> 
> Signed-off-by: Akihiko Odaki <[email protected]>
> Message-ID: <[email protected]>
>
> diff --git a/hw/display/virtio-gpu.c b/hw/display/virtio-gpu.c
> index fbb6fec7a0ad..6bd87d900170 100644
> --- a/hw/display/virtio-gpu.c
> +++ b/hw/display/virtio-gpu.c
> @@ -363,27 +363,29 @@ static void virtio_gpu_resource_create_blob(VirtIOGPU 
> *g,
>      res->resource_id = cblob.resource_id;
>      res->blob_size = cblob.size;
>  
> -    ret = virtio_gpu_create_mapping_iov(g, cblob.nr_entries, sizeof(cblob),
> -                                        cmd, &res->addrs, &res->iov,
> -                                        &res->iov_cnt);
> -    if (ret < 0) {
> -        cmd->error = VIRTIO_GPU_RESP_ERR_UNSPEC;
> -        g_free(res);
> -        return;
> +    if (cblob.nr_entries) {
> +        ret = virtio_gpu_create_mapping_iov(g, cblob.nr_entries, 
> sizeof(cblob),
> +                                            cmd, &res->addrs, &res->iov,
> +                                            &res->iov_cnt);
> +        if (ret < 0) {
> +            cmd->error = VIRTIO_GPU_RESP_ERR_UNSPEC;
> +            g_free(res);
> +            return;
> +        }
> +
> +        if (iov_size(res->iov, res->iov_cnt) < res->blob_size) {
> +            qemu_log_mask(LOG_GUEST_ERROR,
> +                        "%s: backing storage smaller than blob size\n",
> +                        __func__);

Continuation lines are two spaces short of aligning after the opening
paren of qemu_log_mask().

-- 
Marc-AndrĂ© Lureau <[email protected]>


Reply via email to