Re: [PATCH] scsi: megaraid_sas: fix memleak in megasas_alloc_cmdlist_fusion
shuw...@redhat.com, > Found this issue by kmemleak, a few kb mem was leaked in > megasas_alloc_cmdlist_fusion when kzalloc failed for one > megasas_cmd_fusion allocation. Applied to 4.13/scsi-fixes. Thanks! -- Martin K. Petersen Oracle Linux Engineering
Re: [PATCH] scsi: megaraid_sas: fix memleak in megasas_alloc_cmdlist_fusion
shuw...@redhat.com, > Found this issue by kmemleak, a few kb mem was leaked in > megasas_alloc_cmdlist_fusion when kzalloc failed for one > megasas_cmd_fusion allocation. Applied to 4.13/scsi-fixes. Thanks! -- Martin K. Petersen Oracle Linux Engineering
RE: [PATCH] scsi: megaraid_sas: fix memleak in megasas_alloc_cmdlist_fusion
>-Original Message- >From: shuw...@redhat.com [mailto:shuw...@redhat.com] >Sent: Friday, July 21, 2017 4:24 PM >To: kashyap.de...@broadcom.com; sumit.sax...@broadcom.com; >shivasharan.srikanteshw...@broadcom.com; j...@linux.vnet.ibm.com; >martin.peter...@oracle.com >Cc: megaraidlinux@broadcom.com; linux-s...@vger.kernel.org; linux- >ker...@vger.kernel.org; ch...@redhat.com; liw...@redhat.com; Shu Wang >Subject: [PATCH] scsi: megaraid_sas: fix memleak in >megasas_alloc_cmdlist_fusion > >From: Shu Wang> >Found this issue by kmemleak, a few kb mem was leaked in >megasas_alloc_cmdlist_fusion when kzalloc failed for one >megasas_cmd_fusion allocation. > >unreferenced object 0x88045dbd2000 (size 8192): > comm "systemd-udevd", pid 323, jiffies 4294671759 (age 49.008s) > backtrace: >[] kmemleak_alloc+0x4a/0xa0 >[] __kmalloc+0xe8/0x220 >[] megasas_alloc_cmdlist_fusion+0x34/0xe0 >[megaraid_sas] >(gdb) list *megasas_alloc_cmdlist_fusion+0x34 >0xd5c4 is in megasas_alloc_cmdlist_fusion > (drivers/scsi/megaraid/megaraid_sas_fusion.c:443). >[] megasas_alloc_cmds_fusion+0x25/0x410 >[megaraid_sas] >[] megasas_init_adapter_fusion+0x21f/0x640 >[megaraid_sas] >[] megasas_init_fw+0x357/0xd30 [megaraid_sas] >[] megasas_probe_one.part.33+0x636/0x1100 >[megaraid_sas] >[] megasas_probe_one+0x46/0xc0 [megaraid_sas] >[] local_pci_probe+0x45/0xa0 >[] pci_device_probe+0x192/0x1b0 >[] driver_probe_device+0x2a8/0x460 >[] __driver_attach+0xdd/0xe0 >[] bus_for_each_dev+0x6c/0xc0 >[] driver_attach+0x1e/0x20 >[] bus_add_driver+0x45/0x270 >[] driver_register+0x60/0xe0 unreferenced object >0x880454ce3600 (size 192): > backtrace: >[] kmemleak_alloc+0x4a/0xa0 >[] kmem_cache_alloc_trace+0xca/0x1d0 >[] megasas_alloc_cmdlist_fusion+0x77/0xe0 >[megaraid_sas] >(gdb) list *megasas_alloc_cmdlist_fusion+0x77 >0xd607 is in megasas_alloc_cmdlist_fusion >(drivers/scsi/megaraid/megaraid_sas_fusion.c:450). >[] megasas_alloc_cmds_fusion+0x25/0x410 >[megaraid_sas] >[] megasas_init_adapter_fusion+0x21f/0x640 >[megaraid_sas] >[] megasas_init_fw+0x357/0xd30 [megaraid_sas] >[] megasas_probe_one.part.33+0x636/0x1100 >[megaraid_sas] >[] megasas_probe_one+0x46/0xc0 [megaraid_sas] >[] local_pci_probe+0x45/0xa0 >[] pci_device_probe+0x192/0x1b0 >[] driver_probe_device+0x2a8/0x460 >[] __driver_attach+0xdd/0xe0 >[] bus_for_each_dev+0x6c/0xc0 >[] driver_attach+0x1e/0x20 >[] bus_add_driver+0x45/0x270 >[] driver_register+0x60/0xe0 > >Signed-off-by: Shu Wang >--- > drivers/scsi/megaraid/megaraid_sas_fusion.c | 6 +- > 1 file changed, 5 insertions(+), 1 deletion(-) > >diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c >b/drivers/scsi/megaraid/megaraid_sas_fusion.c >index f990ab4d..9855106 100644 >--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c >+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c >@@ -425,7 +425,7 @@ static int megasas_create_sg_sense_fusion(struct >megasas_instance *instance) int megasas_alloc_cmdlist_fusion(struct >megasas_instance *instance) { >- u32 max_mpt_cmd, i; >+ u32 max_mpt_cmd, i, j; > struct fusion_context *fusion; > > fusion = instance->ctrl_context; >@@ -450,11 +450,15 @@ megasas_alloc_cmdlist_fusion(struct >megasas_instance *instance) > fusion->cmd_list[i] = kzalloc(sizeof(struct >megasas_cmd_fusion), > GFP_KERNEL); > if (!fusion->cmd_list[i]) { >+ for (j = 0; j < i; j++) >+ kfree(fusion->cmd_list[j]); >+ kfree(fusion->cmd_list); > dev_err(>pdev->dev, > "Failed from %s %d\n", __func__, __LINE__); > return -ENOMEM; > } > } >+ > return 0; > } > int Acked-by: Sumit Saxena >-- >2.5.0
RE: [PATCH] scsi: megaraid_sas: fix memleak in megasas_alloc_cmdlist_fusion
>-Original Message- >From: shuw...@redhat.com [mailto:shuw...@redhat.com] >Sent: Friday, July 21, 2017 4:24 PM >To: kashyap.de...@broadcom.com; sumit.sax...@broadcom.com; >shivasharan.srikanteshw...@broadcom.com; j...@linux.vnet.ibm.com; >martin.peter...@oracle.com >Cc: megaraidlinux@broadcom.com; linux-s...@vger.kernel.org; linux- >ker...@vger.kernel.org; ch...@redhat.com; liw...@redhat.com; Shu Wang >Subject: [PATCH] scsi: megaraid_sas: fix memleak in >megasas_alloc_cmdlist_fusion > >From: Shu Wang > >Found this issue by kmemleak, a few kb mem was leaked in >megasas_alloc_cmdlist_fusion when kzalloc failed for one >megasas_cmd_fusion allocation. > >unreferenced object 0x88045dbd2000 (size 8192): > comm "systemd-udevd", pid 323, jiffies 4294671759 (age 49.008s) > backtrace: >[] kmemleak_alloc+0x4a/0xa0 >[] __kmalloc+0xe8/0x220 >[] megasas_alloc_cmdlist_fusion+0x34/0xe0 >[megaraid_sas] >(gdb) list *megasas_alloc_cmdlist_fusion+0x34 >0xd5c4 is in megasas_alloc_cmdlist_fusion > (drivers/scsi/megaraid/megaraid_sas_fusion.c:443). >[] megasas_alloc_cmds_fusion+0x25/0x410 >[megaraid_sas] >[] megasas_init_adapter_fusion+0x21f/0x640 >[megaraid_sas] >[] megasas_init_fw+0x357/0xd30 [megaraid_sas] >[] megasas_probe_one.part.33+0x636/0x1100 >[megaraid_sas] >[] megasas_probe_one+0x46/0xc0 [megaraid_sas] >[] local_pci_probe+0x45/0xa0 >[] pci_device_probe+0x192/0x1b0 >[] driver_probe_device+0x2a8/0x460 >[] __driver_attach+0xdd/0xe0 >[] bus_for_each_dev+0x6c/0xc0 >[] driver_attach+0x1e/0x20 >[] bus_add_driver+0x45/0x270 >[] driver_register+0x60/0xe0 unreferenced object >0x880454ce3600 (size 192): > backtrace: >[] kmemleak_alloc+0x4a/0xa0 >[] kmem_cache_alloc_trace+0xca/0x1d0 >[] megasas_alloc_cmdlist_fusion+0x77/0xe0 >[megaraid_sas] >(gdb) list *megasas_alloc_cmdlist_fusion+0x77 >0xd607 is in megasas_alloc_cmdlist_fusion >(drivers/scsi/megaraid/megaraid_sas_fusion.c:450). >[] megasas_alloc_cmds_fusion+0x25/0x410 >[megaraid_sas] >[] megasas_init_adapter_fusion+0x21f/0x640 >[megaraid_sas] >[] megasas_init_fw+0x357/0xd30 [megaraid_sas] >[] megasas_probe_one.part.33+0x636/0x1100 >[megaraid_sas] >[] megasas_probe_one+0x46/0xc0 [megaraid_sas] >[] local_pci_probe+0x45/0xa0 >[] pci_device_probe+0x192/0x1b0 >[] driver_probe_device+0x2a8/0x460 >[] __driver_attach+0xdd/0xe0 >[] bus_for_each_dev+0x6c/0xc0 >[] driver_attach+0x1e/0x20 >[] bus_add_driver+0x45/0x270 >[] driver_register+0x60/0xe0 > >Signed-off-by: Shu Wang >--- > drivers/scsi/megaraid/megaraid_sas_fusion.c | 6 +- > 1 file changed, 5 insertions(+), 1 deletion(-) > >diff --git a/drivers/scsi/megaraid/megaraid_sas_fusion.c >b/drivers/scsi/megaraid/megaraid_sas_fusion.c >index f990ab4d..9855106 100644 >--- a/drivers/scsi/megaraid/megaraid_sas_fusion.c >+++ b/drivers/scsi/megaraid/megaraid_sas_fusion.c >@@ -425,7 +425,7 @@ static int megasas_create_sg_sense_fusion(struct >megasas_instance *instance) int megasas_alloc_cmdlist_fusion(struct >megasas_instance *instance) { >- u32 max_mpt_cmd, i; >+ u32 max_mpt_cmd, i, j; > struct fusion_context *fusion; > > fusion = instance->ctrl_context; >@@ -450,11 +450,15 @@ megasas_alloc_cmdlist_fusion(struct >megasas_instance *instance) > fusion->cmd_list[i] = kzalloc(sizeof(struct >megasas_cmd_fusion), > GFP_KERNEL); > if (!fusion->cmd_list[i]) { >+ for (j = 0; j < i; j++) >+ kfree(fusion->cmd_list[j]); >+ kfree(fusion->cmd_list); > dev_err(>pdev->dev, > "Failed from %s %d\n", __func__, __LINE__); > return -ENOMEM; > } > } >+ > return 0; > } > int Acked-by: Sumit Saxena >-- >2.5.0