scsi: qla2xxx: Avoid that Coverity complains about dereferencing a NULL rport pointer
authorBart Van Assche <bvanassche@acm.org>
Wed, 17 Apr 2019 21:44:19 +0000 (14:44 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 29 Apr 2019 21:24:49 +0000 (17:24 -0400)
Since Coverity cannot know that rport != NULL in qla2xxx_queuecommand() and
since there is code in that function that dereferences the rport pointer,
modify qla2xxx_queuecommand() such that it fails SCSI commands if rport ==
NULL.

Cc: Himanshu Madhani <hmadhani@marvell.com>
Cc: Giridhar Malavali <gmalavali@marvell.com>
Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Acked-by: Himanshu Madhani <hmadhani@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_os.c

index a3561e4..5cfdf0c 100644 (file)
@@ -859,7 +859,8 @@ qla2xxx_queuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd)
        uint32_t tag;
        uint16_t hwq;
 
-       if (unlikely(test_bit(UNLOADING, &base_vha->dpc_flags))) {
+       if (unlikely(test_bit(UNLOADING, &base_vha->dpc_flags)) ||
+           WARN_ON_ONCE(!rport)) {
                cmd->result = DID_NO_CONNECT << 16;
                goto qc24_fail_command;
        }
@@ -982,7 +983,7 @@ qla2xxx_mqueuecommand(struct Scsi_Host *host, struct scsi_cmnd *cmd,
        srb_t *sp;
        int rval;
 
-       rval = fc_remote_port_chkready(rport);
+       rval = rport ? fc_remote_port_chkready(rport) : FC_PORTSTATE_OFFLINE;
        if (rval) {
                cmd->result = rval;
                ql_dbg(ql_dbg_io + ql_dbg_verbose, vha, 0x3076,