OSDN Git Service

vhost-scsi: Fix vhost_scsi struct use after free
authorMike Christie <michael.christie@oracle.com>
Tue, 21 Mar 2023 02:06:18 +0000 (21:06 -0500)
committerMichael S. Tsirkin <mst@redhat.com>
Tue, 4 Apr 2023 15:01:58 +0000 (11:01 -0400)
commite508efc3ae7e44eb3caf595a086bfd3824da5b9a
treef203cdbff4a4eb68d4ffd551cbcde361ba3b5fa6
parent10805eb5d6d15fd4f61b05cc7aa269e12ab99848
vhost-scsi: Fix vhost_scsi struct use after free

If vhost_scsi_setup_vq_cmds fails we leave the tpg->vhost_scsi pointer
set. If the device is freed and then the user unmaps the LUN, the call to
vhost_scsi_port_unlink -> vhost_scsi_hotunplug will see the that
tpg->vhost_scsi is still set and try to use it.

This has us clear the vhost_scsi pointer in the failure path. It also
has us take tv_tpg_mutex in this failure path, because tv_tpg_vhost_count
is accessed under this mutex in vhost_scsi_drop_nexus and in the future
we will want to serialize access to tpg->vhost_scsi with that mutex
instead of the vhost_scsi_mutex.

Signed-off-by: Mike Christie <michael.christie@oracle.com>
Message-Id: <20230321020624.13323-2-michael.christie@oracle.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
drivers/vhost/scsi.c