🇰🇷 한글 설명
Linux 커널의 SCSI 코어에서 호스트가 복구 상태일 때 특정 장치의 명령 재대기 목록이 제대로 설정되지 않는 취약점이 발견되었습니다. 이로 인해 장치 제거 과정에서 일부 장치가 SDEV_CANCEL 상태에 머물며 시스템의 장치 제거 프로세스가 중단(Hang)될 수 있습니다.
💡 쉬운 설명
컴퓨터 부품(SCSI 장치)을 제거하려고 할 때, 시스템이 해당 부품의 작업을 제대로 마무리하지 못해 컴퓨터가 멈추거나 응답하지 않는 현상이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
scsi: core: Run queues for all non-SDEV_DEL devices from scsi_run_host_queues
While a SCSI host is in a recovery state, scsi_mq_requeue_cmd() will not
set the requeue list for a requeued command to be kicked in the future.
The expectation is a call to scsi_run_host_queues() will kick all SCSI
devices once the recovery state is cleared.
However, scsi_run_host_queues() uses shost_for_each_device() which uses
scsi_device_get() and so will ignore devices in a partially removed
state like SDEV_CANCEL. But these devices may also have requeued
requests, leaving their requests stuck from not being kicked and causing
the removal process of the device to hang.
scsi_run_host_queues() needs to run against more devices than the macro
shost_for_each_device() allows. Instead of using the too limiting
scsi_device_get() state checks, only ignore devices in SDEV_DEL state or
when unable to acquire a reference. Attempt to run the queues for all
other devices when scsi_run_host_queues() is called.
📍 영향받는 시스템
Linux Kernel (SCSI core 관련 버전)
⚔️ 공격 벡터
로컬 시스템에서 특정 SCSI 장치의 제거 또는 복구 프로세스를 유도하여 시스템 중단 유발
🛡️ 대응 방법
SCSI 코어의 명령 재대기 로직이 수정된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 보안 업데이트 버전인지 확인