summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorViswas G <Viswas.G@pmcs.com>2015-08-11 09:36:28 (GMT)
committerJames Bottomley <JBottomley@Odin.com>2015-08-27 00:11:01 (GMT)
commit3b700e341144f278b8248418991c086d09b7137b (patch)
treef8db9c17cd3532956b4d433ca22ccd3a987469d0
parent842784e0d15bc21b31ce69f8f3518a8cf86084e3 (diff)
downloadlinux-3b700e341144f278b8248418991c086d09b7137b.tar.xz
pm80xx: Fix for Incorrect DMA Unmapping of SG List
In pm8001_ccb_task_free(), the dma unmapping is done based on ccb->n_elem value. This should be initialized to zero in the task_abort(). Otherwise, pm8001_ccb_task_free() will try for dma_unmap_sg() which is invalid for task abort and can lead to kernel crash. Changes From V1: None Signed-off-by: Viswas G <Viswas.G@pmcs.com> Reviewed-by: Suresh Thiagarajan <Suresh.Thiagarajan@pmcs.com> Reviewed-by: Hannes Reinecke <hare@suse.com> Reviewed-by: Jack Wang <jinpu.wang@profitbricks.com> Reviewed-by: Tomas Henzl <thenzl@redhat.com> Signed-off-by: James Bottomley <JBottomley@Odin.com>
-rw-r--r--drivers/scsi/pm8001/pm8001_sas.c1
1 files changed, 1 insertions, 0 deletions
diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c
index 48f4627..949198c 100644
--- a/drivers/scsi/pm8001/pm8001_sas.c
+++ b/drivers/scsi/pm8001/pm8001_sas.c
@@ -790,6 +790,7 @@ pm8001_exec_internal_task_abort(struct pm8001_hba_info *pm8001_ha,
ccb->device = pm8001_dev;
ccb->ccb_tag = ccb_tag;
ccb->task = task;
+ ccb->n_elem = 0;
res = PM8001_CHIP_DISP->task_abort(pm8001_ha,
pm8001_dev, flag, task_tag, ccb_tag);