Patch "scsi: ufs: core: Fix shift issue in ufshcd_clear_cmd()" has been added to the 6.7-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    scsi: ufs: core: Fix shift issue in ufshcd_clear_cmd()

to the 6.7-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     scsi-ufs-core-fix-shift-issue-in-ufshcd_clear_cmd.patch
and it can be found in the queue-6.7 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit ffa2fa44bfec93c7840ba4f20008aa1facf62c5f
Author: Alice Chao <alice.chao@xxxxxxxxxxxx>
Date:   Mon Feb 5 18:49:04 2024 +0800

    scsi: ufs: core: Fix shift issue in ufshcd_clear_cmd()
    
    [ Upstream commit b513d30d59bb383a6a5d6b533afcab2cee99a8f8 ]
    
    When task_tag >= 32 (in MCQ mode) and sizeof(unsigned int) == 4, 1U <<
    task_tag will out of bounds for a u32 mask. Fix this up to prevent
    SHIFT_ISSUE (bitwise shifts that are out of bounds for their data type).
    
    [name:debug_monitors&]Unexpected kernel BRK exception at EL1
    [name:traps&]Internal error: BRK handler: 00000000f2005514 [#1] PREEMPT SMP
    [name:mediatek_cpufreq_hw&]cpufreq stop DVFS log done
    [name:mrdump&]Kernel Offset: 0x1ba5800000 from 0xffffffc008000000
    [name:mrdump&]PHYS_OFFSET: 0x80000000
    [name:mrdump&]pstate: 22400005 (nzCv daif +PAN -UAO)
    [name:mrdump&]pc : [0xffffffdbaf52bb2c] ufshcd_clear_cmd+0x280/0x288
    [name:mrdump&]lr : [0xffffffdbaf52a774] ufshcd_wait_for_dev_cmd+0x3e4/0x82c
    [name:mrdump&]sp : ffffffc0081471b0
    <snip>
    Workqueue: ufs_eh_wq_0 ufshcd_err_handler
    Call trace:
     dump_backtrace+0xf8/0x144
     show_stack+0x18/0x24
     dump_stack_lvl+0x78/0x9c
     dump_stack+0x18/0x44
     mrdump_common_die+0x254/0x480 [mrdump]
     ipanic_die+0x20/0x30 [mrdump]
     notify_die+0x15c/0x204
     die+0x10c/0x5f8
     arm64_notify_die+0x74/0x13c
     do_debug_exception+0x164/0x26c
     el1_dbg+0x64/0x80
     el1h_64_sync_handler+0x3c/0x90
     el1h_64_sync+0x68/0x6c
     ufshcd_clear_cmd+0x280/0x288
     ufshcd_wait_for_dev_cmd+0x3e4/0x82c
     ufshcd_exec_dev_cmd+0x5bc/0x9ac
     ufshcd_verify_dev_init+0x84/0x1c8
     ufshcd_probe_hba+0x724/0x1ce0
     ufshcd_host_reset_and_restore+0x260/0x574
     ufshcd_reset_and_restore+0x138/0xbd0
     ufshcd_err_handler+0x1218/0x2f28
     process_one_work+0x5fc/0x1140
     worker_thread+0x7d8/0xe20
     kthread+0x25c/0x468
     ret_from_fork+0x10/0x20
    
    Signed-off-by: Alice Chao <alice.chao@xxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240205104905.24929-1-alice.chao@xxxxxxxxxxxx
    Reviewed-by: Stanley Jhu <chu.stanley@xxxxxxxxx>
    Reviewed-by: Bart Van Assche <bvanassche@xxxxxxx>
    Signed-off-by: Martin K. Petersen <martin.petersen@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/drivers/ufs/core/ufshcd.c b/drivers/ufs/core/ufshcd.c
index 1f8d86b9c4fa0..6f7cfecacd273 100644
--- a/drivers/ufs/core/ufshcd.c
+++ b/drivers/ufs/core/ufshcd.c
@@ -3045,7 +3045,7 @@ bool ufshcd_cmd_inflight(struct scsi_cmnd *cmd)
  */
 static int ufshcd_clear_cmd(struct ufs_hba *hba, u32 task_tag)
 {
-	u32 mask = 1U << task_tag;
+	u32 mask;
 	unsigned long flags;
 	int err;
 
@@ -3063,6 +3063,8 @@ static int ufshcd_clear_cmd(struct ufs_hba *hba, u32 task_tag)
 		return 0;
 	}
 
+	mask = 1U << task_tag;
+
 	/* clear outstanding transaction before retry */
 	spin_lock_irqsave(hba->host->host_lock, flags);
 	ufshcd_utrl_clear(hba, mask);




[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux