]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: lpfc: Check for hdwq null ptr when cleaning up lpfc_vport structure
authorJustin Tee <justin.tee@broadcom.com>
Wed, 18 Jun 2025 19:21:28 +0000 (12:21 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Mon, 23 Jun 2025 17:10:33 +0000 (13:10 -0400)
If a call to lpfc_sli4_read_rev() from lpfc_sli4_hba_setup() fails, the
resultant cleanup routine lpfc_sli4_vport_delete_fcp_xri_aborted() may
occur before sli4_hba.hdwqs are allocated.  This may result in a null
pointer dereference when attempting to take the abts_io_buf_list_lock for
the first hardware queue.  Fix by adding a null ptr check on
phba->sli4_hba.hdwq and early return because this situation means there
must have been an error during port initialization.

Signed-off-by: Justin Tee <justin.tee@broadcom.com>
Link: https://lore.kernel.org/r/20250618192138.124116-4-justintee8345@gmail.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/lpfc/lpfc_scsi.c

index 8acb744febcdb35406260a871b976978cdc599ba..31a9f142bcb9565740773c6e31695db2bdb1660c 100644 (file)
@@ -390,6 +390,10 @@ lpfc_sli4_vport_delete_fcp_xri_aborted(struct lpfc_vport *vport)
        if (!(vport->cfg_enable_fc4_type & LPFC_ENABLE_FCP))
                return;
 
+       /* may be called before queues established if hba_setup fails */
+       if (!phba->sli4_hba.hdwq)
+               return;
+
        spin_lock_irqsave(&phba->hbalock, iflag);
        for (idx = 0; idx < phba->cfg_hdw_queue; idx++) {
                qp = &phba->sli4_hba.hdwq[idx];