]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
qla2xxx: Fix system crash in qlt_plogi_ack_unref
authorQuinn Tran <quinn.tran@cavium.com>
Wed, 13 Dec 2017 19:13:40 +0000 (11:13 -0800)
committerSomasundaram Krishnasamy <somasundaram.krishnasamy@oracle.com>
Fri, 5 Jan 2018 21:05:17 +0000 (13:05 -0800)
Orabug: 27235104

Fix system crash due to NULL pointer access.

qlt_plogi_ack_t and fc_port structures were not properly
bound before calling qlt_plogi_ack_unref().

RIP: 0010:qlt_plogi_ack_unref+0xa1/0x150 [qla2xxx]
Call Trace:
qla24xx_create_new_sess+0xb1/0x320 [qla2xxx]
qla2x00_do_work+0x123/0x260 [qla2xxx]
qla2x00_iocb_work_fn+0x30/0x40 [qla2xxx]
process_one_work+0x1f3/0x530
worker_thread+0x4e/0x480
kthread+0x10c/0x140

Fixes: 726b85487067d ("qla2xxx: Add framework for async fabric discovery")
Cc: <stable@vger.kernel.org> # 4.10+
Signed-off-by: Quinn Tran <quinn.tran@cavium.com>
Signed-off-by: Giridhar Malavali <giridhar.malavali@cavium.com>
Signed-off-by: Himanshu Madhani <himanshu.madhani@cavium.com>
Reviewed-by: Hannes Reinecke <hare@suse.com>
[ Upstream commit 19759033e0d0beed70421ab9258f5ede79e070ae ]
Signed-off-by: Somasundaram Krishnasamy <somasundaram.krishnasamy@oracle.com>
Reviewed-by: Jack Vogel <jack.vogel@oracle.com>
drivers/scsi/qla2xxx/qla_os.c

index 8a931e2171941ccd45f1510dafce204d923f2c94..d5931ace3e40b0533dd636a9d709e39b08224b8c 100644 (file)
@@ -4335,11 +4335,11 @@ void qla24xx_create_new_sess(struct scsi_qla_host *vha, struct qla_work_evt *e)
                } else {
                        list_add_tail(&fcport->list, &vha->vp_fcports);
 
-                       if (pla) {
-                               qlt_plogi_ack_link(vha, pla, fcport,
-                                   QLT_PLOGI_LINK_SAME_WWN);
-                               pla->ref_count--;
-                       }
+               }
+               if (pla) {
+                       qlt_plogi_ack_link(vha, pla, fcport,
+                           QLT_PLOGI_LINK_SAME_WWN);
+                       pla->ref_count--;
                }
        }
        spin_unlock_irqrestore(&vha->hw->tgt.sess_lock, flags);