From b2c86b35db3118248d34e5a4abffd5a1b03aa893 Mon Sep 17 00:00:00 2001 From: yidong0635 Date: Thu, 27 Aug 2020 13:22:09 -0400 Subject: [PATCH] vhost/vhost_scsi: Fix coredump issue for non-scsi device. Remove assert and add exit codes instead. That in non-debug mode, these could lead coredump. We don't want the vhost target be crashed after recieved invalid commands. fixes issue: #1575 Signed-off-by: yidong0635 Change-Id: Ifef6d8f9c32150213bc2c80787e92d428d4c49c3 Reviewed-on: https://review.spdk.io/gerrit/c/spdk/spdk/+/3951 Community-CI: Mellanox Build Bot Reviewed-by: Changpeng Liu Reviewed-by: JinYu Reviewed-by: Tomasz Zawadzki Tested-by: SPDK CI Jenkins --- lib/vhost/vhost_scsi.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/vhost/vhost_scsi.c b/lib/vhost/vhost_scsi.c index 49e49dc76..35028c30f 100644 --- a/lib/vhost/vhost_scsi.c +++ b/lib/vhost/vhost_scsi.c @@ -993,7 +993,11 @@ spdk_vhost_scsi_dev_add_tgt(struct spdk_vhost_dev *vdev, int scsi_tgt_num, const char *bdev_names_list[1]; svdev = to_scsi_dev(vdev); - assert(svdev != NULL); + if (!svdev) { + SPDK_ERRLOG("Before adding a SCSI target, there should be a SCSI device."); + return -EINVAL; + } + if (scsi_tgt_num < 0) { for (scsi_tgt_num = 0; scsi_tgt_num < SPDK_VHOST_SCSI_CTRLR_MAX_DEVS; scsi_tgt_num++) { if (svdev->scsi_dev_state[scsi_tgt_num].dev == NULL) { @@ -1118,7 +1122,11 @@ spdk_vhost_scsi_dev_remove_tgt(struct spdk_vhost_dev *vdev, unsigned scsi_tgt_nu } svdev = to_scsi_dev(vdev); - assert(svdev != NULL); + if (!svdev) { + SPDK_ERRLOG("An invalid SCSI device that removing from a SCSI target."); + return -EINVAL; + } + scsi_dev_state = &svdev->scsi_dev_state[scsi_tgt_num]; if (scsi_dev_state->status != VHOST_SCSI_DEV_PRESENT) {