Skip to content

Commit

Permalink
vhost/vsock: handle vhost_vq_init_access() error
Browse files Browse the repository at this point in the history
Propagate the error when vhost_vq_init_access() fails and set
vq->private_data to NULL.

Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
  • Loading branch information
Stefan Hajnoczi authored and Michael S. Tsirkin committed Jan 24, 2017
1 parent 7a308bb commit 0516ffd
Showing 1 changed file with 9 additions and 4 deletions.
13 changes: 9 additions & 4 deletions drivers/vhost/vsock.c
Original file line number Diff line number Diff line change
Expand Up @@ -373,6 +373,7 @@ static void vhost_vsock_handle_rx_kick(struct vhost_work *work)

static int vhost_vsock_start(struct vhost_vsock *vsock)
{
struct vhost_virtqueue *vq;
size_t i;
int ret;

Expand All @@ -383,19 +384,20 @@ static int vhost_vsock_start(struct vhost_vsock *vsock)
goto err;

for (i = 0; i < ARRAY_SIZE(vsock->vqs); i++) {
struct vhost_virtqueue *vq = &vsock->vqs[i];
vq = &vsock->vqs[i];

mutex_lock(&vq->mutex);

if (!vhost_vq_access_ok(vq)) {
ret = -EFAULT;
mutex_unlock(&vq->mutex);
goto err_vq;
}

if (!vq->private_data) {
vq->private_data = vsock;
vhost_vq_init_access(vq);
ret = vhost_vq_init_access(vq);
if (ret)
goto err_vq;
}

mutex_unlock(&vq->mutex);
Expand All @@ -405,8 +407,11 @@ static int vhost_vsock_start(struct vhost_vsock *vsock)
return 0;

err_vq:
vq->private_data = NULL;
mutex_unlock(&vq->mutex);

for (i = 0; i < ARRAY_SIZE(vsock->vqs); i++) {
struct vhost_virtqueue *vq = &vsock->vqs[i];
vq = &vsock->vqs[i];

mutex_lock(&vq->mutex);
vq->private_data = NULL;
Expand Down

0 comments on commit 0516ffd

Please sign in to comment.