aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2012-11-21 09:54:48 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-07-28 16:18:45 -0700
commitd45ff5f89c087a667290048c24deaeb27fa43ba0 (patch)
tree46e4202e003c90407e153ba066c2de019b7310ea /drivers/scsi
parenta4c38fde90666a77d461fd352914f954232361ab (diff)
downloadkernel_samsung_smdk4412-d45ff5f89c087a667290048c24deaeb27fa43ba0.tar.gz
kernel_samsung_smdk4412-d45ff5f89c087a667290048c24deaeb27fa43ba0.tar.bz2
kernel_samsung_smdk4412-d45ff5f89c087a667290048c24deaeb27fa43ba0.zip
SCSI: megaraid_sas: fix memory leak if SGL has zero length entries
commit 7a6a731bd00ca90d0e250867c3b9c05b5ff0fa49 upstream. 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> Acked-by: Adam Radford <aradford@gmail.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
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 931cb11083c..5eac650d262 100644
--- a/drivers/scsi/megaraid/megaraid_sas_base.c
+++ b/drivers/scsi/megaraid/megaraid_sas_base.c
@@ -4746,10 +4746,12 @@ megasas_mgmt_fw_ioctl(struct megasas_instance *instance,
sense, sense_handle);
}
- for (i = 0; i < ioc->sge_count && kbuff_arr[i]; i++) {
- dma_free_coherent(&instance->pdev->dev,
- kern_sge32[i].length,
- kbuff_arr[i], kern_sge32[i].phys_addr);
+ for (i = 0; i < ioc->sge_count; i++) {
+ if (kbuff_arr[i])
+ dma_free_coherent(&instance->pdev->dev,
+ kern_sge32[i].length,
+ kbuff_arr[i],
+ kern_sge32[i].phys_addr);
}
megasas_return_cmd(instance, cmd);