🇰🇷 한글 설명
Linux 커널의 qla2xxx SCSI 드라이버에서 fcport->unsol_ctx_head 리스트를 보호하는 공통 잠금 장치가 없어 발생하는 취약점입니다. 여러 컨텍스트에서 리스트를 동시에 수정할 때 포인터가 손상될 수 있으며, 이를 해결하기 위해 전용 spinlock인 unsol_ctx_lock이 도입되었습니다.
💡 쉬운 설명
여러 작업이 동시에 데이터 목록을 수정하려고 할 때, 이를 순서대로 줄 세워주는 장치가 없어 데이터가 엉키는 문제입니다. 이로 인해 시스템이 불안정해지거나 오류가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
scsi: qla2xxx: Serialize NVMe unsol ctx list with a per-fcport lock
The fcport->unsol_ctx_head list is modified from several contexts without
a common lock. Entries are added in qla2xxx_process_purls_iocb() from the
response queue ISR (under the qpair qp_lock), while they are removed from
qla2xxx_process_purls_pkt() (DPC/purex worker), qla_nvme_xmt_ls_rsp()
(NVMe-FC transport callback) and qla_nvme_release_lsrsp_cmd_kref() (SRB
completion). The qpair qp_lock cannot serialize this per-fcport list since
multiqueue adapters add entries through different qpairs, so a concurrent
add and delete (or two concurrent deletes) can corrupt the list pointers.
Introduce a dedicated per-fcport spinlock, unsol_ctx_lock, initialized in
qla2x00_alloc_fcport(), and take it around every list_add_tail()/list_del()
on unsol_ctx_head. The add nests under the existing qp_lock; no delete path
takes qp_lock, so the lock order is consistent and deadlock free.
📍 영향받는 시스템
Linux kernel (qla2xxx SCSI driver module)
⚔️ 공격 벡터
멀티큐 어댑터를 사용하는 환경에서 동시적인 입출력 요청을 통한 레이스 컨디션 유발
🛡️ 대응 방법
qla2xxx 드라이버에 unsol_ctx_lock이 적용된 최신 Linux 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 패치가 적용된 보안 업데이트 버전인지 확인