scsi: hisi_sas: Check before using pointer variables
authorYihang Li <liyihang9@huawei.com>
Thu, 14 Dec 2023 03:45:14 +0000 (11:45 +0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 25 Jan 2024 23:35:26 +0000 (15:35 -0800)
[ Upstream commit 8dd10296be8562a45c6c6794dd492a2b7dccede8 ]

In commit 4b329abc9180 ("scsi: hisi_sas: Move slot variable definition in
hisi_sas_abort_task()"), we move the variables slot to the function head.
However, the variable slot may be NULL, we should check it in each branch.

Fixes: 4b329abc9180 ("scsi: hisi_sas: Move slot variable definition in hisi_sas_abort_task()")
Signed-off-by: Yihang Li <liyihang9@huawei.com>
Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com>
Link: https://lore.kernel.org/r/1702525516-51258-4-git-send-email-chenxiang66@hisilicon.com
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/scsi/hisi_sas/hisi_sas_main.c

index 6dfa8be..b155ac8 100644 (file)
@@ -1641,7 +1641,10 @@ static int hisi_sas_abort_task(struct sas_task *task)
        task->task_state_flags |= SAS_TASK_STATE_ABORTED;
        spin_unlock_irqrestore(&task->task_state_lock, flags);
 
-       if (slot && task->task_proto & SAS_PROTOCOL_SSP) {
+       if (!slot)
+               goto out;
+
+       if (task->task_proto & SAS_PROTOCOL_SSP) {
                u16 tag = slot->idx;
                int rc2;
 
@@ -1688,7 +1691,7 @@ static int hisi_sas_abort_task(struct sas_task *task)
                                rc = hisi_sas_softreset_ata_disk(device);
                        }
                }
-       } else if (slot && task->task_proto & SAS_PROTOCOL_SMP) {
+       } else if (task->task_proto & SAS_PROTOCOL_SMP) {
                /* SMP */
                u32 tag = slot->idx;
                struct hisi_sas_cq *cq = &hisi_hba->cq[slot->dlvry_queue];