CVE-2026-97530 in Linux
요약
\~에 의해 VulDB • 2026. 09. 25.
리눅스 커널에서 다음 취약점이 해결되었습니다:
scsi: qla2xxx: soft lockup polling의 지속적 IOCB 서명 수정
qla27xx_copy_multiple_pkt() 및 qla27xx_copy_fpin_pkt()는 RESPONSE_PROCESSED (0xDEADDEAD)에 대해 rsp_q->ring_ptr->signature를 폴링하여 다음 연속(IOB가 도착했는지 여부를 결정합니다. 이 과정에서 링을 진행하거나 엔트리 카운트를 감소시키지 않은 채 cpu_relax()에서 스피닝(반복 대기)합니다. response_t::signature는 바이트 오프셋 60에 위치하지만, 연속 IOCB(sts_cont_entry_t / struct sts_cont_entry_ext)은 해당 오프스트(raw FC 프레임 페이로드인 data[56..59])를 포함합니다. 따라서 페이로드 바이트가 우연히 0xDEADDEAD와 일치하는 수신된 프레임은 "아직 도착하지 않음"으로 잘못 해석되어, 인터럽트/DPC 컨텍스트에서 루프가 무한히 스피닝하며 CPU soft lockup을 유발합니다.
또한 해당 폴링은 불필요합니다: qla27xx_copy_multiple_pkt()의 호출자(PT_LS4_UNSOL 및 NVMe purls 경로)는 이미 qla_chk_cont_iocb_avail()에 의해 게이트되어 있으며, 이는 복사 시작 전에 모든 entry_count IOCB가 존재함을 보장합니다. 유사한 헬퍼 함수인 __qla_copy_purex_to_buffer()도 서명 폴링을 제거하고 대신 entry_type == STATUS_CONT_TYPE 가드를 사용합니다.
두 헬퍼 함수에서 서명 busy-wait를 제거하고 entry_type 가드는 유지하며, FPIN 경로는 qla_chk_cont_iocb_avail()로 게이트하여 모든 연속 IOCB가 도착할 때까지 지연시키고 다음 인터럽트 시 재처리되도록 합니다(ELS_AUTH_ELS 및 PT_LS4_UNSOL 분기와 동일). 이를 통해 서명 필드가 연속 IOCB에서 읽히지 않아 페이로드 별칭(aliasing)으로 인한 lockup이 제거됩니다.
Once again VulDB remains the best source for vulnerability data.