scsi: ipr: Fix missing/incorrect resource cleanup in error case
authorChengguang Xu <cgxu519@mykernel.net>
Sun, 29 May 2022 15:34:53 +0000 (23:34 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 22 Jun 2022 12:21:57 +0000 (14:21 +0200)
[ Upstream commit d64c491911322af1dcada98e5b9ee0d87e8c8fee ]

Fix missing resource cleanup (when '(--i) == 0') for error case in
ipr_alloc_mem() and skip incorrect resource cleanup (when '(--i) == 0') for
error case in ipr_request_other_msi_irqs() because variable i started from
1.

Link: https://lore.kernel.org/r/20220529153456.4183738-4-cgxu519@mykernel.net
Reviewed-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Brian King <brking@linux.vnet.ibm.com>
Signed-off-by: Chengguang Xu <cgxu519@mykernel.net>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/scsi/ipr.c

index 5d78f7e..56b8a2d 100644 (file)
@@ -9791,7 +9791,7 @@ static int ipr_alloc_mem(struct ipr_ioa_cfg *ioa_cfg)
                                        GFP_KERNEL);
 
                if (!ioa_cfg->hrrq[i].host_rrq)  {
-                       while (--i > 0)
+                       while (--i >= 0)
                                dma_free_coherent(&pdev->dev,
                                        sizeof(u32) * ioa_cfg->hrrq[i].size,
                                        ioa_cfg->hrrq[i].host_rrq,
@@ -10064,7 +10064,7 @@ static int ipr_request_other_msi_irqs(struct ipr_ioa_cfg *ioa_cfg,
                        ioa_cfg->vectors_info[i].desc,
                        &ioa_cfg->hrrq[i]);
                if (rc) {
-                       while (--i >= 0)
+                       while (--i > 0)
                                free_irq(pci_irq_vector(pdev, i),
                                        &ioa_cfg->hrrq[i]);
                        return rc;