Hi Bart,

Instead of doing this I would move this check to the top of the function,
something like this
-----------------8<----------
diff --git a/drivers/scsi/qla2xxx/qla_bsg.c
b/drivers/scsi/qla2xxx/qla_bsg.c
index 371bb86..b5f84ae 100644
--- a/drivers/scsi/qla2xxx/qla_bsg.c
+++ b/drivers/scsi/qla2xxx/qla_bsg.c
@@ -255,6 +255,12 @@ qla2x00_process_els(struct fc_bsg_job *bsg_job)
        int rval =  (DRIVER_ERROR << 16);
        uint16_t nextlid = 0;

 
+       if (!vha->flags.online) {
+               ql_log(ql_log_warn, vha, 0x7005, "Host not online.\n");
+               rval = -EIO;
+               goto done;
+       }
+
        if (bsg_job->request->msgcode == FC_BSG_RPT_ELS) {
                rport = bsg_job->rport;
                fcport = *(fc_port_t **) rport->dd_data;
@@ -326,12 +332,6 @@ qla2x00_process_els(struct fc_bsg_job *bsg_job)
                        NPH_FABRIC_CONTROLLER : NPH_F_PORT;
        }

 
-       if (!vha->flags.online) {
-               ql_log(ql_log_warn, vha, 0x7005, "Host not online.\n");
-               rval = -EIO;
-               goto done;
-       }
-
        req_sg_cnt =
                dma_map_sg(&ha->pdev->dev,
bsg_job->request_payload.sg_list,
                bsg_job->request_payload.sg_cnt, DMA_TO_DEVICE);

----------------8<---------

Thanks,
~Saurav




>Avoid that the fcport structure gets leaked if
>bsg_job->request->msgcode == FC_BSG_HST_ELS_NOLOGIN, the fcport
>allocation succeeds and the !vha->flags.online branch is taken.
>Detected by Coverity.
>
>Signed-off-by: Bart Van Assche <bvanass...@acm.org>
>Cc: Chad Dupuis <chad.dup...@qlogic.com>
>Cc: Saurav Kashyap <saurav.kash...@qlogic.com>
>---
> drivers/scsi/qla2xxx/qla_bsg.c |    2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
>diff --git a/drivers/scsi/qla2xxx/qla_bsg.c
>b/drivers/scsi/qla2xxx/qla_bsg.c
>index 39719f8..af35707 100644
>--- a/drivers/scsi/qla2xxx/qla_bsg.c
>+++ b/drivers/scsi/qla2xxx/qla_bsg.c
>@@ -329,7 +329,7 @@ qla2x00_process_els(struct fc_bsg_job *bsg_job)
>       if (!vha->flags.online) {
>               ql_log(ql_log_warn, vha, 0x7005, "Host not online.\n");
>               rval = -EIO;
>-              goto done;
>+              goto done_free_fcport;
>       }
> 
>       req_sg_cnt =
>-- 
>1.7.10.4
>
>--
>To unsubscribe from this list: send the line "unsubscribe linux-scsi" in
>the body of a message to majord...@vger.kernel.org
>More majordomo info at  http://vger.kernel.org/majordomo-info.html

<<attachment: winmail.dat>>

Reply via email to