scsi: qla2xxx: Prevent memory leak for CT req/rsp allocation
authorQuinn Tran <qtran@marvall.com>
Fri, 25 Jan 2019 07:23:47 +0000 (23:23 -0800)
committerMartin K. Petersen <martin.petersen@oracle.com>
Wed, 6 Feb 2019 02:41:16 +0000 (21:41 -0500)
This patch fixes memory leak by releasing DMA memory in case CT request and
response allocation fails.

Signed-off-by: Quinn Tran <qtran@marvall.com>
Signed-off-by: Himanshu Madhani <hmadhani@marvell.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/scsi/qla2xxx/qla_gs.c

index 90cfa394f942acaaf0806f7a043feaa886cf88d5..4aada6b3707617a743f73bdc0da6d96c55845b12 100644 (file)
@@ -4157,7 +4157,8 @@ int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type, srb_t *sp)
                        spin_lock_irqsave(&vha->work_lock, flags);
                        vha->scan.scan_flags &= ~SF_SCANNING;
                        spin_unlock_irqrestore(&vha->work_lock, flags);
-                       goto done_free_sp;
+                       qla2x00_rel_sp(sp);
+                       return rval;
                }
                sp->u.iocb_cmd.u.ctarg.req_size = GPN_FT_REQ_SIZE;
 
@@ -4175,7 +4176,13 @@ int qla24xx_async_gpnft(scsi_qla_host_t *vha, u8 fc4_type, srb_t *sp)
                        spin_lock_irqsave(&vha->work_lock, flags);
                        vha->scan.scan_flags &= ~SF_SCANNING;
                        spin_unlock_irqrestore(&vha->work_lock, flags);
-                       goto done_free_sp;
+                       dma_free_coherent(&vha->hw->pdev->dev,
+                           sp->u.iocb_cmd.u.ctarg.req_allocated_size,
+                           sp->u.iocb_cmd.u.ctarg.req,
+                           sp->u.iocb_cmd.u.ctarg.req_dma);
+                       sp->u.iocb_cmd.u.ctarg.req = NULL;
+                       qla2x00_rel_sp(sp);
+                       return rval;
                }
                sp->u.iocb_cmd.u.ctarg.rsp_size = rspsz;