Message ID | 20230325110004.363898-1-lizetao1@huawei.com |
---|---|
State | New |
Headers | show |
Series | scsi: qla2xxx: Fix memory leak in qla2x00_probe_one() | expand |
> On Mar 25, 2023, at 4:00 AM, Li Zetao <lizetao1@huawei.com> wrote: > > There is a memory leak reported by kmemleak: > > unreferenced object 0xffffc900003f0000 (size 12288): > comm "modprobe", pid 19117, jiffies 4299751452 (age 42490.264s) > hex dump (first 32 bytes): > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ > backtrace: > [<00000000629261a8>] __vmalloc_node_range+0xe56/0x1110 > [<0000000001906886>] __vmalloc_node+0xbd/0x150 > [<000000005bb4dc34>] vmalloc+0x25/0x30 > [<00000000a2dc1194>] qla2x00_create_host+0x7a0/0xe30 [qla2xxx] > [<0000000062b14b47>] qla2x00_probe_one+0x2eb8/0xd160 [qla2xxx] > [<00000000641ccc04>] local_pci_probe+0xeb/0x1a0 > > The root cause is traced to an error handling path in qla2x00_probe_one() > when the adapter "base_vha" initialize failed. The fab_scan_rp "scan.l" > is used to record the port information and it is alloced in > qla2x00_create_host(). However, it is not released in the error handling > path "probe_failed". > > Fix it by freeing the memory of "scan.l" when an error occurs in adapter > initialize process. > > Fixes: a4239945b8ad ("scsi: qla2xxx: Add switch command to simplify fabric discovery") > Signed-off-by: Li Zetao <lizetao1@huawei.com> > --- > drivers/scsi/qla2xxx/qla_os.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c > index 80c4ee9df2a4..38916e11684d 100644 > --- a/drivers/scsi/qla2xxx/qla_os.c > +++ b/drivers/scsi/qla2xxx/qla_os.c > @@ -3606,6 +3606,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) > probe_failed: > qla_enode_stop(base_vha); > qla_edb_stop(base_vha); > + vfree(base_vha->scan.l); > if (base_vha->gnl.l) { > dma_free_coherent(&ha->pdev->dev, base_vha->gnl.size, > base_vha->gnl.l, base_vha->gnl.ldma); > -- > 2.34.1 > Reviewed-by: Himanshu Madhani <himanshu.madhani@oracle.com>
diff --git a/drivers/scsi/qla2xxx/qla_os.c b/drivers/scsi/qla2xxx/qla_os.c index 80c4ee9df2a4..38916e11684d 100644 --- a/drivers/scsi/qla2xxx/qla_os.c +++ b/drivers/scsi/qla2xxx/qla_os.c @@ -3606,6 +3606,7 @@ qla2x00_probe_one(struct pci_dev *pdev, const struct pci_device_id *id) probe_failed: qla_enode_stop(base_vha); qla_edb_stop(base_vha); + vfree(base_vha->scan.l); if (base_vha->gnl.l) { dma_free_coherent(&ha->pdev->dev, base_vha->gnl.size, base_vha->gnl.l, base_vha->gnl.ldma);
There is a memory leak reported by kmemleak: unreferenced object 0xffffc900003f0000 (size 12288): comm "modprobe", pid 19117, jiffies 4299751452 (age 42490.264s) hex dump (first 32 bytes): 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 ................ backtrace: [<00000000629261a8>] __vmalloc_node_range+0xe56/0x1110 [<0000000001906886>] __vmalloc_node+0xbd/0x150 [<000000005bb4dc34>] vmalloc+0x25/0x30 [<00000000a2dc1194>] qla2x00_create_host+0x7a0/0xe30 [qla2xxx] [<0000000062b14b47>] qla2x00_probe_one+0x2eb8/0xd160 [qla2xxx] [<00000000641ccc04>] local_pci_probe+0xeb/0x1a0 The root cause is traced to an error handling path in qla2x00_probe_one() when the adapter "base_vha" initialize failed. The fab_scan_rp "scan.l" is used to record the port information and it is alloced in qla2x00_create_host(). However, it is not released in the error handling path "probe_failed". Fix it by freeing the memory of "scan.l" when an error occurs in adapter initialize process. Fixes: a4239945b8ad ("scsi: qla2xxx: Add switch command to simplify fabric discovery") Signed-off-by: Li Zetao <lizetao1@huawei.com> --- drivers/scsi/qla2xxx/qla_os.c | 1 + 1 file changed, 1 insertion(+)