]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
scsi: ufs: core: Make ufshcd_uic_cmd_compl() easier to analyze
authorBart Van Assche <bvanassche@acm.org>
Thu, 12 Sep 2024 22:30:04 +0000 (15:30 -0700)
committerMartin K. Petersen <martin.petersen@oracle.com>
Fri, 4 Oct 2024 01:34:43 +0000 (21:34 -0400)
In ufshcd_uic_cmd_compl(), there is code that dereferences 'cmd' with
and without checking the 'cmd' pointer. This confuses static source code
analyzers like Coverity and sparse. Since none of the code in
ufshcd_uic_cmd_compl() can do anything useful if 'cmd' is NULL, move the
'cmd' test near the start of this function.

Signed-off-by: Bart Van Assche <bvanassche@acm.org>
Link: https://lore.kernel.org/r/20240912223019.3510966-4-bvanassche@acm.org
Reviewed-by: Peter Wang <peter.wang@mediatek.com>
Reviewed-by: Bao D. Nguyen <quic_nguyenb@quicinc.com>
Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
drivers/ufs/core/ufshcd.c

index 8212e2d14256b7eb0fd24a8b2d43e017839889f2..0c803b6f222193c68e1891e4a8ee20c3b40a8d87 100644 (file)
@@ -5481,10 +5481,13 @@ static irqreturn_t ufshcd_uic_cmd_compl(struct ufs_hba *hba, u32 intr_status)
 
        spin_lock(hba->host->host_lock);
        cmd = hba->active_uic_cmd;
+       if (WARN_ON_ONCE(!cmd))
+               goto unlock;
+
        if (ufshcd_is_auto_hibern8_error(hba, intr_status))
                hba->errors |= (UFSHCD_UIC_HIBERN8_MASK & intr_status);
 
-       if (intr_status & UIC_COMMAND_COMPL && cmd) {
+       if (intr_status & UIC_COMMAND_COMPL) {
                cmd->argument2 |= ufshcd_get_uic_cmd_result(hba);
                cmd->argument3 = ufshcd_get_dme_attr_val(hba);
                if (!hba->uic_async_done)
@@ -5501,7 +5504,10 @@ static irqreturn_t ufshcd_uic_cmd_compl(struct ufs_hba *hba, u32 intr_status)
 
        if (retval == IRQ_HANDLED)
                ufshcd_add_uic_command_trace(hba, cmd, UFS_CMD_COMP);
+
+unlock:
        spin_unlock(hba->host->host_lock);
+
        return retval;
 }