scsi: lpfc: Fix coverity errors on NULL pointer checks
authorJames Smart <jsmart2021@gmail.com>
Sun, 22 Sep 2019 03:58:57 +0000 (20:58 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Tue, 1 Oct 2019 02:07:10 +0000 (22:07 -0400)
Coverity flagged several scenarios where checking of null pointer values
wasn't consistent.

Fix the code to that be consistent on checking.

Link: https://lore.kernel.org/r/20190922035906.10977-12-jsmart2021@gmail.com
Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <jsmart2021@gmail.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_els.c
drivers/scsi/lpfc/lpfc_nvmet.c
drivers/scsi/lpfc/lpfc_scsi.c
drivers/scsi/lpfc/lpfc_sli.c

index d530399..55ab375 100644 (file)
@@ -4291,6 +4291,11 @@ lpfc_cmpl_els_rsp(struct lpfc_hba *phba, struct lpfc_iocbq *cmdiocb,
 
        irsp = &rspiocb->iocb;
 
+       if (!vport) {
+               lpfc_printf_vlog(vport, KERN_ERR, LOG_ELS,
+                                "3177 ELS response failed\n");
+               goto out;
+       }
        if (cmdiocb->context_un.mbox)
                mbox = cmdiocb->context_un.mbox;
 
index 121dbdc..c9481a6 100644 (file)
@@ -1958,12 +1958,10 @@ lpfc_nvmet_unsol_ls_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
        uint32_t *payload;
        uint32_t size, oxid, sid, rc;
 
-       fc_hdr = (struct fc_frame_header *)(nvmebuf->hbuf.virt);
-       oxid = be16_to_cpu(fc_hdr->fh_ox_id);
 
-       if (!phba->targetport) {
+       if (!nvmebuf || !phba->targetport) {
                lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR,
-                               "6154 LS Drop IO x%x\n", oxid);
+                               "6154 LS Drop IO\n");
                oxid = 0;
                size = 0;
                sid = 0;
@@ -1971,6 +1969,9 @@ lpfc_nvmet_unsol_ls_buffer(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
                goto dropit;
        }
 
+       fc_hdr = (struct fc_frame_header *)(nvmebuf->hbuf.virt);
+       oxid = be16_to_cpu(fc_hdr->fh_ox_id);
+
        tgtp = (struct lpfc_nvmet_tgtport *)phba->targetport->private;
        payload = (uint32_t *)(nvmebuf->dbuf.virt);
        size = bf_get(lpfc_rcqe_length,  &nvmebuf->cq_event.cqe.rcqe_cmpl);
@@ -2401,6 +2402,11 @@ lpfc_nvmet_unsol_ls_event(struct lpfc_hba *phba, struct lpfc_sli_ring *pring,
        d_buf = piocb->context2;
        nvmebuf = container_of(d_buf, struct hbq_dmabuf, dbuf);
 
+       if (!nvmebuf) {
+               lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR,
+                               "3015 LS Drop IO\n");
+               return;
+       }
        if (phba->nvmet_support == 0) {
                lpfc_in_buf_free(phba, &nvmebuf->dbuf);
                return;
@@ -2429,6 +2435,11 @@ lpfc_nvmet_unsol_fcp_event(struct lpfc_hba *phba,
                           uint64_t isr_timestamp,
                           uint8_t cqflag)
 {
+       if (!nvmebuf) {
+               lpfc_printf_log(phba, KERN_ERR, LOG_NVME_IOERR,
+                               "3167 NVMET FCP Drop IO\n");
+               return;
+       }
        if (phba->nvmet_support == 0) {
                lpfc_rq_buf_free(phba, &nvmebuf->hbuf);
                return;
index c2773c0..f06f63e 100644 (file)
@@ -3814,7 +3814,7 @@ lpfc_scsi_cmd_iocb_cmpl(struct lpfc_hba *phba, struct lpfc_iocbq *pIocbIn,
 
        /* Sanity check on return of outstanding command */
        cmd = lpfc_cmd->pCmd;
-       if (!cmd) {
+       if (!cmd || !phba) {
                lpfc_printf_vlog(vport, KERN_ERR, LOG_INIT,
                                 "2621 IO completion: Not an active IO\n");
                spin_unlock(&lpfc_cmd->buf_lock);
index 313441a..939efee 100644 (file)
@@ -2674,7 +2674,8 @@ lpfc_sli_handle_mb_event(struct lpfc_hba *phba)
                        lpfc_printf_log(phba, KERN_ERR, LOG_MBOX | LOG_SLI,
                                        "(%d):0323 Unknown Mailbox command "
                                        "x%x (x%x/x%x) Cmpl\n",
-                                       pmb->vport ? pmb->vport->vpi : 0,
+                                       pmb->vport ? pmb->vport->vpi :
+                                       LPFC_VPORT_UNKNOWN,
                                        pmbox->mbxCommand,
                                        lpfc_sli_config_mbox_subsys_get(phba,
                                                                        pmb),
@@ -2695,7 +2696,8 @@ lpfc_sli_handle_mb_event(struct lpfc_hba *phba)
                                        "(%d):0305 Mbox cmd cmpl "
                                        "error - RETRYing Data: x%x "
                                        "(x%x/x%x) x%x x%x x%x\n",
-                                       pmb->vport ? pmb->vport->vpi : 0,
+                                       pmb->vport ? pmb->vport->vpi :
+                                       LPFC_VPORT_UNKNOWN,
                                        pmbox->mbxCommand,
                                        lpfc_sli_config_mbox_subsys_get(phba,
                                                                        pmb),
@@ -2703,7 +2705,8 @@ lpfc_sli_handle_mb_event(struct lpfc_hba *phba)
                                                                        pmb),
                                        pmbox->mbxStatus,
                                        pmbox->un.varWords[0],
-                                       pmb->vport->port_state);
+                                       pmb->vport ? pmb->vport->port_state :
+                                       LPFC_VPORT_UNKNOWN);
                                pmbox->mbxStatus = 0;
                                pmbox->mbxOwner = OWN_HOST;
                                rc = lpfc_sli_issue_mbox(phba, pmb, MBX_NOWAIT);