🇰🇷 한글 설명
Linux 커널의 UFS(Universal Flash Storage) 드라이버에서 장치 관리 명령(NOP OUT)의 타임아웃 처리 오류가 발견되었습니다. 명령이 타임아웃되었음에도 완료 구조체가 NULL로 설정되지 않아, 이후 장치가 명령을 완료할 경우 스택에 할당된 메모리를 참조하여 시스템 크래시(Panic)가 발생할 수 있습니다.
💡 쉬운 설명
저장 장치와 통신하는 과정에서 오류가 발생했을 때, 컴퓨터가 잘못된 메모리 주소를 참조하여 시스템이 갑자기 멈추거나 꺼질 수 있는 문제입니다. 장치와의 연결을 복구하려는 시도가 오히려 시스템 충돌을 일으킬 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
scsi: ufs: core: Fix device management cmd timeout flow
In the UFS error handling flow, the host will send a device management cmd
(NOP OUT) to the device for link recovery. If this cmd times out and
clearing the doorbell fails, ufshcd_wait_for_dev_cmd() will do nothing and
return. hba->dev_cmd.complete struct is not set to NULL.
When this happens, if cmd has been completed by device, then we will call
complete() in __ufshcd_transfer_req_compl(). Because the complete struct is
allocated on the stack, the following crash will occur:
ipanic_die+0x24/0x38 [mrdump]
die+0x344/0x748
arm64_notify_die+0x44/0x104
do_debug_exception+0x104/0x1e0
el1_dbg+0x38/0x54
el1_sync_handler+0x40/0x88
el1_sync+0x8c/0x140
queued_spin_lock_slowpath+0x2e4/0x3c0
__ufshcd_transfer_req_compl+0x3b0/0x1164
ufshcd_trc_handler+0x15c/0x308
ufshcd_host_reset_and_restore+0x54/0x260
ufshcd_reset_and_restore+0x28c/0x57c
ufshcd_err_handler+0xeb8/0x1b6c
process_one_work+0x288/0x964
worker_thread+0x4bc/0xc7c
kthread+0x15c/0x264
ret_from_fork+0x10/0x30
📍 영향받는 시스템
UFS 드라이버를 사용하는 Linux 커널 기반 시스템 (scsi: ufs: core 구성 요소 포함)
⚔️ 공격 벡터
물리적 또는 소프트웨어적으로 UFS 장치에 오류를 유도하여 타임아웃 및 메모리 손상을 일으키는 방식
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 ufshcd_wait_for_dev_cmd()의 오류 처리 로직을 수정해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.