In the Linux kernel, the following vulnerability has been resolved:
scsi: ufs: core: Fix deadlock during RTC update
There is a deadlock when runtime suspend waits for the flush of RTC work,
and the RTC work calls ufshcd_rpm_get_sync() to wait for runtime resume.
Here is deadlock backtrace:
kworker/0:1 D 4892.876354 10 10971 4859 0x4208060 0x8 10 0 120 670730152367
ptr f0ffff80c2e40000 0 1 0x00000001 0x000000ff 0x000000ff 0x000000ff
__switch_to+0x1a8/0x2d4
__schedule+0x684/0xa98
schedule+0x48/0xc8
schedule_timeout+0x48/0x170
do_wait_for_common+0x108/0x1b0
wait_for_completion+0x44/0x60
__flush_work+0x39c/0x424
__cancel_work_sync+0xd8/0x208
cancel_delayed_work_sync+0x14/0x28
__ufshcd_wl_suspend+0x19c/0x480
ufshcd_wl_runtime_suspend+0x3c/0x1d4
scsi_runtime_suspend+0x78/0xc8
__rpm_callback+0x94/0x3e0
rpm_suspend+0x2d4/0x65c
__pm_runtime_suspend+0x80/0x114
scsi_runtime_idle+0x38/0x6c
rpm_idle+0x264/0x338
__pm_runtime_idle+0x80/0x110
ufshcd_rtc_work+0x128/0x1e4
process_one_work+0x26c/0x650
worker_thread+0x260/0x3d8
kthread+0x110/0x134
ret_from_fork+0x10/0x20
Skip updating RTC if RPM state is not RPM_ACTIVE.
References
In the Linux kernel, the following vulnerability has been resolved:
scsi: ufs: core: Fix deadlock during RTC update
There is a deadlock when runtime suspend waits for the flush of RTC work,
and the RTC work calls ufshcd_rpm_get_sync() to wait for runtime resume.
Here is deadlock backtrace:
kworker/0:1 D 4892.876354 10 10971 4859 0x4208060 0x8 10 0 120 670730152367
ptr f0ffff80c2e40000 0 1 0x00000001 0x000000ff 0x000000ff 0x000000ff
__switch_to+0x1a8/0x2d4
__schedule+0x684/0xa98
schedule+0x48/0xc8
schedule_timeout+0x48/0x170
do_wait_for_common+0x108/0x1b0
wait_for_completion+0x44/0x60
__flush_work+0x39c/0x424
__cancel_work_sync+0xd8/0x208
cancel_delayed_work_sync+0x14/0x28
__ufshcd_wl_suspend+0x19c/0x480
ufshcd_wl_runtime_suspend+0x3c/0x1d4
scsi_runtime_suspend+0x78/0xc8
__rpm_callback+0x94/0x3e0
rpm_suspend+0x2d4/0x65c
__pm_runtime_suspend+0x80/0x114
scsi_runtime_idle+0x38/0x6c
rpm_idle+0x264/0x338
__pm_runtime_idle+0x80/0x110
ufshcd_rtc_work+0x128/0x1e4
process_one_work+0x26c/0x650
worker_thread+0x260/0x3d8
kthread+0x110/0x134
ret_from_fork+0x10/0x20
Skip updating RTC if RPM state is not RPM_ACTIVE.
References