Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 038e0af4 authored by Asias He's avatar Asias He Committed by Nicholas Bellinger
Browse files

tcm_vhost: Add missed lock in vhost_scsi_clear_endpoint()



tv_tpg->tv_tpg_vhost_count should be protected by tv_tpg->tv_tpg_mutex.

Signed-off-by: default avatarAsias He <asias@redhat.com>
Reviewed-by: default avatarStefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: default avatarPaolo Bonzini <pbonzini@redhat.com>
Acked-by: default avatarMichael S. Tsirkin <mst@redhat.com>
Signed-off-by: default avatarNicholas Bellinger <nab@linux-iscsi.org>
parent 0fb889b8
Loading
Loading
Loading
Loading
+8 −4
Original line number Diff line number Diff line
@@ -850,7 +850,7 @@ static int vhost_scsi_clear_endpoint(
	for (index = 0; index < vs->dev.nvqs; ++index) {
		if (!vhost_vq_access_ok(&vs->vqs[index])) {
			ret = -EFAULT;
			goto err;
			goto err_dev;
		}
	}
	for (i = 0; i < VHOST_SCSI_MAX_TARGET; i++) {
@@ -860,10 +860,11 @@ static int vhost_scsi_clear_endpoint(
		if (!tv_tpg)
			continue;

		mutex_lock(&tv_tpg->tv_tpg_mutex);
		tv_tport = tv_tpg->tport;
		if (!tv_tport) {
			ret = -ENODEV;
			goto err;
			goto err_tpg;
		}

		if (strcmp(tv_tport->tport_name, t->vhost_wwpn)) {
@@ -872,16 +873,19 @@ static int vhost_scsi_clear_endpoint(
				tv_tport->tport_name, tv_tpg->tport_tpgt,
				t->vhost_wwpn, t->vhost_tpgt);
			ret = -EINVAL;
			goto err;
			goto err_tpg;
		}
		tv_tpg->tv_tpg_vhost_count--;
		vs->vs_tpg[target] = NULL;
		vs->vs_endpoint = false;
		mutex_unlock(&tv_tpg->tv_tpg_mutex);
	}
	mutex_unlock(&vs->dev.mutex);
	return 0;

err:
err_tpg:
	mutex_unlock(&tv_tpg->tv_tpg_mutex);
err_dev:
	mutex_unlock(&vs->dev.mutex);
	return ret;
}