🇰🇷 한글 설명
Linux 커널의 RDS(Reliable Datagram Sockets) IB 모듈에서 프로토콜 버전 불일치 발생 시 잘못된 함수를 호출하여 데드락이 발생하는 취약점입니다. 버전 불일치 시 rds_conn_destroy()를 호출하면 현재 보유 중인 락(lock)과 충돌하여 작업 큐가 중단되는 현상이 발생합니다.
💡 쉬운 설명
통신 규격이 맞지 않을 때 시스템이 스스로를 정리하는 과정에서 서로를 기다리며 멈춰버리는 현상이 발생합니다. 이로 인해 네트워크 연결 관련 작업이 영구적으로 중단될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
rds: ib: use rds_conn_drop() on protocol version mismatch
rds_ib_cm_connect_complete() runs from the RDMA-CM event handler with
conn->c_cm_lock held. When the peer negotiates a protocol version
older than RDS_PROTOCOL_COMPAT_VERSION, the handler calls
rds_conn_destroy(), which is only safe in the rmmod path: it
synchronously tears the connection down and flush_work()es the
shutdown work cp_down_w.
That shutdown work (rds_conn_shutdown()) needs cp_cm_lock, which is
the very lock the event handler still holds, so the flush never
completes: the two workers wait on each other and the RDS connection
workqueues stall for good.
All other RDMA-CM failure paths (REJECTED, CONNECT_ERROR,
DISCONNECTED) use rds_conn_drop(), which marks the connection
RDS_CONN_ERROR and schedules the shutdown work asynchronously. Use
it here as well.
📍 영향받는 시스템
Linux Kernel (RDS IB 모듈 사용 환경)
⚔️ 공격 벡터
RDMA-CM 연결 과정에서 의도적으로 낮은 프로토콜 버전을 사용하여 시스템의 데드락 유도
🛡️ 대응 방법
RDS 프로토콜 버전 불일치 시 rds_conn_destroy() 대신 rds_conn_drop()을 사용하도록 커널 패치 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 최신 패치 버전인지 확인
📊 CVSS Vector String
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux