| From 8392a1894e4f05cf36a93114c5a90993d0bd85ed Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sun, 20 Feb 2022 12:17:59 +0900 |
| Subject: scsi: pm8001: Fix task leak in pm8001_send_abort_all() |
| |
| From: Damien Le Moal <damien.lemoal@opensource.wdc.com> |
| |
| [ Upstream commit f90a74892f3acf0cdec5844e90fc8686ca13e7d7 ] |
| |
| In pm8001_send_abort_all(), make sure to free the allocated sas task |
| if pm8001_tag_alloc() or pm8001_mpi_build_cmd() fail. |
| |
| Link: https://lore.kernel.org/r/20220220031810.738362-21-damien.lemoal@opensource.wdc.com |
| Reviewed-by: John Garry <john.garry@huawei.com> |
| Signed-off-by: Damien Le Moal <damien.lemoal@opensource.wdc.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/scsi/pm8001/pm8001_hwi.c | 9 ++++++--- |
| 1 file changed, 6 insertions(+), 3 deletions(-) |
| |
| diff --git a/drivers/scsi/pm8001/pm8001_hwi.c b/drivers/scsi/pm8001/pm8001_hwi.c |
| index 1b1860f305ef..7351e767b68d 100644 |
| --- a/drivers/scsi/pm8001/pm8001_hwi.c |
| +++ b/drivers/scsi/pm8001/pm8001_hwi.c |
| @@ -1767,7 +1767,6 @@ static void pm8001_send_abort_all(struct pm8001_hba_info *pm8001_ha, |
| } |
| |
| task = sas_alloc_slow_task(GFP_ATOMIC); |
| - |
| if (!task) { |
| pm8001_dbg(pm8001_ha, FAIL, "cannot allocate task\n"); |
| return; |
| @@ -1776,8 +1775,10 @@ static void pm8001_send_abort_all(struct pm8001_hba_info *pm8001_ha, |
| task->task_done = pm8001_task_done; |
| |
| res = pm8001_tag_alloc(pm8001_ha, &ccb_tag); |
| - if (res) |
| + if (res) { |
| + sas_free_task(task); |
| return; |
| + } |
| |
| ccb = &pm8001_ha->ccb_info[ccb_tag]; |
| ccb->device = pm8001_ha_dev; |
| @@ -1794,8 +1795,10 @@ static void pm8001_send_abort_all(struct pm8001_hba_info *pm8001_ha, |
| |
| ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &task_abort, |
| sizeof(task_abort), 0); |
| - if (ret) |
| + if (ret) { |
| + sas_free_task(task); |
| pm8001_tag_free(pm8001_ha, ccb_tag); |
| + } |
| |
| } |
| |
| -- |
| 2.35.1 |
| |