🇰🇷 한글 설명
리눅스 커널의 SCSI UFS 코어에서 에러 처리 중 내부 명령어가 실행되지 못해 발생하는 데드락 취약점입니다. 에러 복구 과정에서 태그셋이 정지(quiesce)될 때 내부 명령어가 함께 정지되어 시스템이 무한 대기 상태에 빠질 수 있습니다.
💡 쉬운 설명
컴퓨터 저장 장치에 오류가 발생했을 때, 이를 고치기 위한 명령어가 시스템 자체에 의해 차단되어 컴퓨터가 멈춰버리는 문제입니다. 시스템이 스스로를 고치려고 시도하지만, 고치는 도구마저 잠겨버려 아무것도 할 수 없는 상태가 됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
scsi: ufs: core: Keep internal commands dispatchable during error handling
Commit 08b12cda6c44 ("scsi: ufs: core: Switch to scsi_get_internal_cmd()")
switched UFS internal commands to allocate requests on
hba->host->pseudo_sdev->request_queue, which shares the host tagset with
regular LUNs.
During error recovery, ufshcd_err_handling_prepare() calls
blk_mq_quiesce_tagset(&hba->host->tag_set), marking all queues in the
tagset as quiesced, including pseudo_sdev->request_queue. When
ufshcd_verify_dev_init() subsequently issues internal commands (e.g. NOP
OUT UPIU) via blk_execute_rq(), blk_mq_run_hw_queue() skips running the
quiesced queue, resulting in an unrecoverable circular wait deadlock.
Keep quiescing the tagset and unquiesce the pseudo SCSI device on top of
that, so internal commands stay dispatchable while the logical units remain
quiesced. Re-quiesce the pseudo device before unquiescing the tagset so
that quiesce_depth stays balanced.
Clock scaling and ufshcd_pause_command_processing() are unaffected: they
keep quiescing the whole tagset, internal commands included.
📍 영향받는 시스템
Linux kernel (UFS driver 사용 시스템)
⚔️ 공격 벡터
물리적 또는 소프트웨어적 오류를 유도하여 UFS 에러 핸들링 로직을 트리거함으로써 발생
🛡️ 대응 방법
커널 패치(Commit 08b12cda6c44 적용 버전)를 적용하여 내부 명령어가 정지되지 않도록 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 패치가 적용된 최신 버전인지 배포판 보안 공지를 통해 확인