Looks okay. Reviewed-by: Justin Tee <justin.tee@xxxxxxxxxxxx> Thanks, Justin On Tue, Apr 4, 2023 at 12:24 AM <lishuchang@xxxxxxxxxxx> wrote: > > From: Shuchang Li <lishuchang@xxxxxxxxxxx> > > When if_type equals to zero and pci_resource_start(pdev, PCI_64BIT_BAR4) > returns false, drbl_regs_memmap_p is not remapped.This passes a NULL > pointer to iounmap(), which can trigger a WARN() on certain arches. > > When if_type equals to six and pci_resource_start(pdev, PCI_64BIT_BAR4) > returns true, drbl_regs_memmap_p may has been remapped and > ctrl_regs_memmap_p is not remapped. This is a resource leak and passes > a NULL pointer to iounmap(). > > To fix these issues, we need to add null checks before iounmap(), and > change some goto lables. > > Fixes: 1351e69fc6db ("scsi: lpfc: Add push-to-adapter support to sli4") > Signed-off-by: Shuchang Li <lishuchang@xxxxxxxxxxx> > --- > drivers/scsi/lpfc/lpfc_init.c | 10 ++++++---- > 1 file changed, 6 insertions(+), 4 deletions(-) > > diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c > index 4f7485958c49..ed75230b0209 100644 > --- a/drivers/scsi/lpfc/lpfc_init.c > +++ b/drivers/scsi/lpfc/lpfc_init.c > @@ -12026,7 +12026,7 @@ lpfc_sli4_pci_mem_setup(struct lpfc_hba *phba) > goto out_iounmap_all; > } else { > error = -ENOMEM; > - goto out_iounmap_all; > + goto out_iounmap_ctrl; > } > } > > @@ -12044,7 +12044,7 @@ lpfc_sli4_pci_mem_setup(struct lpfc_hba *phba) > dev_err(&pdev->dev, > "ioremap failed for SLI4 HBA dpp registers.\n"); > error = -ENOMEM; > - goto out_iounmap_ctrl; > + goto out_iounmap_all; > } > phba->pci_bar4_memmap_p = phba->sli4_hba.dpp_regs_memmap_p; > } > @@ -12069,9 +12069,11 @@ lpfc_sli4_pci_mem_setup(struct lpfc_hba *phba) > return 0; > > out_iounmap_all: > - iounmap(phba->sli4_hba.drbl_regs_memmap_p); > + if (phba->sli4_hba.drbl_regs_memmap_p) > + iounmap(phba->sli4_hba.drbl_regs_memmap_p); > out_iounmap_ctrl: > - iounmap(phba->sli4_hba.ctrl_regs_memmap_p); > + if (phba->sli4_hba.ctrl_regs_memmap_p) > + iounmap(phba->sli4_hba.ctrl_regs_memmap_p); > out_iounmap_conf: > iounmap(phba->sli4_hba.conf_regs_memmap_p); > > -- > 2.25.1 >