CVE-2026-93781 in Linux정보

요약

\~에 의해 VulDB • 2026. 09. 24.

리눅스 커널에서 다음 취약점이 해결되었습니다:

scsi: core: scsi_eh_lock_door()에서 태그 할당 시 블로킹하지 않음

scsi_restart_operations() 호출 시 호스트가 여전히 SHOST_RECOVERY 상태이므로, 즉 호스트가 SHOST_RUNNING으로 전환되고 scsi_run_host_queues()가 큐를 재시작하기 전에 scsi_eh_lock_door()가 호출됩니다. 이 함수는 플래그 없이 scsi_alloc_request()를 통해 요청을 할당하므로, 모든 태그가 이미 사용 중인 경우 blk_mq_get_tag()이 무료 스케줄링 태그(sched tag)를 기다리며 블로킹될 수 있습니다.

이러한 태그들은 에러 처리 중 scsi_eh_flush_done_q()에 의해 재큐된 명령어들이 보유하고 있을 수 있습니다. 이러한 명령어는 호스트가 SHOST_RECOVERY 상태를 벗어나고 scsi_run_host_queues()가 호출되어 큐를 재시작할 때까지 디스패치될 수 없습니다 - 이는 scsi_eh_lock_door()가 반환한 *후*에 발생합니다.

이는 순환 의존성을 형성합니다:

- SCSI 에러 핸들러 스레드에서 실행되는 scsi_eh_lock_door()는 재큐된 명령어가 보유하고 있는 sched tag를 기다립니다; - 재큐된 명령어는 에러 핸들러 스레드가 scsi_restart_operations()를 벗어나고 큐를 재시작할 때까지 완료되지 않으며 sched tag를 해제하지 못합니다.

단일 드라이버 태그(예: USB 저장 장치)가 있는 디바이스의 경우, 이는 제출될 수 없는 I/O와 함께 확실한 데드락(deadlock)을 유발합니다. 이 문제는 저희 환경에서도 재현되었습니다.

잠금(locking) 작업은 최선의 노력을 다하는(best-effort) 운영이며, scsi_eh_lock_door()는 요청 할당이 실패할 경우 이미 조용히 반환합니다. sched tag를 사용할 수 없는 경우 블로킹 대신 할당이 실행되도록 scsi_alloc_request()에 BLK_MQ_REQ_NOWAIT 플래그를 전달합니다. 이는 순환 의존성을 끊고 에러 핸들러가 큐 재시작을 완료하도록 하며, 이후 대기 중인 명령어들이 정상적으로 디스패치됩니다.

Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.

출처

Want to stay up to date on a daily basis?

Enable the mail alert feature now!