aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2012-11-21 03:54:48 -0500
committerJames Bottomley <JBottomley@Parallels.com>2013-07-05 17:42:42 -0400
commit7a6a731bd00ca90d0e250867c3b9c05b5ff0fa49 (patch)
tree436e4632cffee92778dbafbb0c426fe267bbe4ac /drivers/scsi
parentb2c311075db578f1433d9b303698491bfa21279a (diff)
[SCSI] megaraid_sas: fix memory leak if SGL has zero length entries
commit 98cb7e44 ([SCSI] megaraid_sas: Sanity check user supplied length before passing it to dma_alloc_coherent()) introduced a memory leak. Memory allocated for entries following zero length SGL entries will not be freed. Reference: http://bugs.debian.org/688198 Signed-off-by: Bjørn Mork <bjorn@mork.no> Cc: <stable@vger.kernel.org> Acked-by: Adam Radford <aradford@gmail.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/megaraid/megaraid_sas_base.c10
1 files changed, 6 insertions, 4 deletions
diff --git a/drivers/scsi/megaraid/megaraid_sas_base.c b/drivers/scsi/megaraid/megaraid_sas_base.c
index 6002d363c637..0177295599e0 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -4958,10 +4958,12 @@ megasas_mgmt_fw_ioctl(struct megasas_instance *instance,
4958 sense, sense_handle); 4958 sense, sense_handle);
4959 } 4959 }
4960 4960
4961 for (i = 0; i < ioc->sge_count && kbuff_arr[i]; i++) { 4961 for (i = 0; i < ioc->sge_count; i++) {
4962 dma_free_coherent(&instance->pdev->dev, 4962 if (kbuff_arr[i])
4963 kern_sge32[i].length, 4963 dma_free_coherent(&instance->pdev->dev,
4964 kbuff_arr[i], kern_sge32[i].phys_addr); 4964 kern_sge32[i].length,
4965 kbuff_arr[i],
4966 kern_sge32[i].phys_addr);
4965 } 4967 }
4966 4968
4967 megasas_return_cmd(instance, cmd); 4969 megasas_return_cmd(instance, cmd);