scsi: add additional check for initiator port

Vhost-scsi target will not set task's initiator port parameter,
so reservation commands sent from Guest will cause segment fault.

Change-Id: Ifc175effded5371eca08d5bfe7e4aa977dd4b1c6
Signed-off-by: Changpeng Liu <changpeng.liu@intel.com>
Reviewed-on: https://review.gerrithub.io/c/spdk/spdk/+/457550
Tested-by: SPDK CI Jenkins <sys_sgci@intel.com>
Reviewed-by: Ben Walker <benjamin.walker@intel.com>
Reviewed-by: Darek Stojaczyk <dariusz.stojaczyk@intel.com>
This commit is contained in:
Changpeng Liu 2019-06-11 00:07:32 -04:00 committed by Ben Walker
parent 8cdb3d330e
commit 14f6d724ac

View File

@ -99,14 +99,18 @@ spdk_scsi_pr_register_registrant(struct spdk_scsi_lun *lun,
/* New I_T nexus */
reg->initiator_port = initiator_port;
snprintf(reg->initiator_port_name, sizeof(reg->initiator_port_name), "%s",
initiator_port->name);
reg->transport_id_len = initiator_port->transport_id_len;
memcpy(reg->transport_id, initiator_port->transport_id, reg->transport_id_len);
if (initiator_port) {
snprintf(reg->initiator_port_name, sizeof(reg->initiator_port_name), "%s",
initiator_port->name);
reg->transport_id_len = initiator_port->transport_id_len;
memcpy(reg->transport_id, initiator_port->transport_id, reg->transport_id_len);
}
reg->target_port = target_port;
snprintf(reg->target_port_name, sizeof(reg->target_port_name), "%s",
target_port->name);
reg->relative_target_port_id = target_port->index;
if (target_port) {
snprintf(reg->target_port_name, sizeof(reg->target_port_name), "%s",
target_port->name);
reg->relative_target_port_id = target_port->index;
}
reg->rkey = sa_rkey;
TAILQ_INSERT_TAIL(&lun->reg_head, reg, link);
lun->pr_generation++;