summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAsias He <asias@redhat.com>2013-04-02 23:31:37 +0800
committerNicholas Bellinger <nab@linux-iscsi.org>2013-04-02 16:43:34 -0700
commitaf0d9187f66db2711f94dc20d5a06ec9ba5845b3 (patch)
tree6458ebd741af6112cdfda39030edba9a9637e587
parentf85eda8d75d37a3796cee7f5a906e50e3f13d9e1 (diff)
downloadlinux-af0d9187f66db2711f94dc20d5a06ec9ba5845b3.tar.gz
linux-af0d9187f66db2711f94dc20d5a06ec9ba5845b3.tar.bz2
linux-af0d9187f66db2711f94dc20d5a06ec9ba5845b3.zip
tcm_vhost: Use ACCESS_ONCE for vs->vs_tpg[target] access
In vhost_scsi_handle_vq: tv_tpg = vs->vs_tpg[target]; if (!tv_tpg) { .... return } tv_cmd = vhost_scsi_allocate_cmd(tv_tpg, &v_req, 1) vs->vs_tpg[target] might change after the NULL check and 2) the above line might access tv_tpg from vs->vs_tpg[target]. To prevent 2), use ACCESS_ONCE. Thanks mst for catching this up! Signed-off-by: Asias He <asias@redhat.com> Acked-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Nicholas Bellinger <nab@linux-iscsi.org>
-rw-r--r--drivers/vhost/tcm_vhost.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/vhost/tcm_vhost.c b/drivers/vhost/tcm_vhost.c
index 2968b4934659..dd9614eb2577 100644
--- a/drivers/vhost/tcm_vhost.c
+++ b/drivers/vhost/tcm_vhost.c
@@ -661,7 +661,7 @@ static void vhost_scsi_handle_vq(struct vhost_scsi *vs,
/* Extract the tpgt */
target = v_req.lun[1];
- tv_tpg = vs->vs_tpg[target];
+ tv_tpg = ACCESS_ONCE(vs->vs_tpg[target]);
/* Target does not exist, fail the request */
if (unlikely(!tv_tpg)) {