The n_elem local variable in pm8001_task_exec() is initialized to 0 and changed set to the number of DMA scatter elements for a needed for a task command only for ATA commands and for SAS commands that have a non-zero number of sg segments. n_elem is never initialized to 0 for SAS commands that do not no sg segments, potentially leading to an incorrect value of n_elem being used for a task. Add the missing 0 initialization. Signed-off-by: Damien Le Moal <damien.lemoal@xxxxxxxxxxxxxxxxxx> --- drivers/scsi/pm8001/pm8001_sas.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/scsi/pm8001/pm8001_sas.c b/drivers/scsi/pm8001/pm8001_sas.c index 7b749da82a61..8cd7e7837f41 100644 --- a/drivers/scsi/pm8001/pm8001_sas.c +++ b/drivers/scsi/pm8001/pm8001_sas.c @@ -383,7 +383,7 @@ static int pm8001_task_exec(struct sas_task *task, struct sas_task *t = task; struct task_status_struct *ts = &t->task_status; struct pm8001_ccb_info *ccb; - u32 tag = 0xdeadbeef, rc = 0, n_elem = 0; + u32 tag = 0xdeadbeef, rc = 0, n_elem; unsigned long flags = 0; enum sas_protocol task_proto = t->task_proto; @@ -440,6 +440,8 @@ static int pm8001_task_exec(struct sas_task *task, rc = -ENOMEM; goto err_out_tag; } + } else { + n_elem = 0; } } else { n_elem = t->num_scatter; -- 2.34.1