diff --git a/drivers/virt/gunyah/gh_virtio_backend.c b/drivers/virt/gunyah/gh_virtio_backend.c index 71b88bb4504a..79bd6eae5fc0 100644 --- a/drivers/virt/gunyah/gh_virtio_backend.c +++ b/drivers/virt/gunyah/gh_virtio_backend.c @@ -630,14 +630,18 @@ static long virtio_backend_ioctl(struct file *file, unsigned int cmd, if (copy_from_user(&d, argp, sizeof(d))) return -EFAULT; - if (!d.label || !d.config_size || !d.config_data) - return -EINVAL; - vb_dev = vb_dev_get(vm, d.label); if (!vb_dev) return -EINVAL; mutex_lock(&vb_dev->mutex); + if (!d.label || d.config_size > vb_dev->config_shared_size || + !d.config_size || !d.config_data) { + mutex_unlock(&vb_dev->mutex); + vb_dev_put(vb_dev); + return -EINVAL; + } + if (!vb_dev->config_shared_buf) { mutex_unlock(&vb_dev->mutex); vb_dev_put(vb_dev);