🇰🇷 한글 설명
Linux 커널의 qla2xxx SCSI 드라이버에서 fcport 구조체가 이중으로 해제되는 메모리 관리 버그입니다. kref_put()에서 참조 카운트가 0이 될 때 qla2x00_els_dcmd_sp_free() 함수가 호출되어 fcport를 해제하고, 같은 메모리 주소를 다시 한번 더 해제하려고 하면서 double free 취약점이 발생합니다.
💡 쉬운 설명
Linux 커널의 메모리 관리 버그로 같은 메모리를 두 번 해제합니다. 이를 통해 공격자가 시스템을 충돌시키거나 커널 권한으로 임의 코드를 실행할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
scsi: qla2xxx: Completely fix fcport double free
In qla24xx_els_dcmd_iocb() sp->free is set to qla2x00_els_dcmd_sp_free().
When an error happens, this function is called by qla2x00_sp_release(),
when kref_put() releases the first and the last reference.
qla2x00_els_dcmd_sp_free() frees fcport by calling qla2x00_free_fcport().
Doing it one more time after kref_put() is a bad idea.
📍 영향받는 시스템
Linux kernel qla2xxx 드라이버 (Fibre Channel SCSI 호스트 어댑터)
⚔️ 공격 벡터
로컬 또는 네트워크 기반 SCSI/Fibre Channel 명령 처리 중 예외 상황 트리거를 통한 double free 유발
🛡️ 대응 방법
Linux kernel을 최신 버전으로 업데이트하거나 qla2xxx 드라이버 패치 적용
🔧 검증 코드
명령어 결과에서 qla2xxx 드라이버 패치 정보가 표시되거나, 현재 커널 버전이 4.14.x 이상인 경우 최신 패치 적용 여부를 커널 changelog에서 확인하세요.
grep -i 'qla2xxx' /usr/src/linux*/drivers/scsi/qla2xxx/*.c 2>/dev/null | grep -E 'double|free' | head -5 || uname -r