🇰🇷 한글 설명
Linux 커널의 IPoIB 드라이버에서 멀티캐스트 플러시 작업 중 인터페이스가 종료될 때 발생하는 레이스 컨디션 취약점입니다. 플러시 과정에서 운영 상태 플래그가 잘못 복구되어 인터페이스 종료 시 작업 큐가 무한 재시도하며 시스템 데드락을 유발할 수 있습니다.
💡 쉬운 설명
네트워크 장치를 끌 때 특정 작업이 끝나지 않아 컴퓨터가 멈춰버리는 현상이 발생할 수 있습니다. 네트워크 설정 변경 중에 장치를 끄면 시스템이 응답하지 않는 상태가 될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
IB/IPoIB: Avoid restoring OPER_UP after multicast flush
ipoib_ib_dev_flush_light() temporarily clears IPOIB_FLAG_OPER_UP to
prevent multicast joins while ipoib_mcast_dev_flush() is running, and
restores the flag afterwards if it was previously set.
This restore races with ipoib_ib_dev_down(). If the interface is brought
down while the flush is in progress, ipoib_ib_dev_down() clears
IPOIB_FLAG_OPER_UP, but the flush path may set it again after the device
has already gone down.
Since commit 894021a75291 ("IB/ipoib: Make the carrier_on_task race
aware"), ipoib_mcast_carrier_on_task() relies on IPOIB_FLAG_OPER_UP
being cleared to terminate its rtnl_trylock() retry loop. If the flag is
left set after shutdown, the workqueue retries forever, causing teardown
to deadlock when ipoib_ndo_uninit() waits in destroy_workqueue() while
holding RTNL.
Instead of overloading IPOIB_FLAG_OPER_UP to block multicast joins
during a light flush, introduce a dedicated IPOIB_FLAG_MCAST_FLUSH flag.
Use it together with IPOIB_FLAG_OPER_UP to determine whether multicast
joins are allowed, avoiding the race with device shutdown.
📍 영향받는 시스템
Linux kernel (IB/IPoIB 드라이버를 사용하는 환경)
⚔️ 공격 벡터
로컬 사용자가 네트워크 인터페이스를 조작하여 특정 타이밍에 장치를 종료함으로써 시스템 데드락 유도
🛡️ 대응 방법
커널 패치를 적용하여 IPOIB_FLAG_MCAST_FLUSH 전용 플래그를 도입한 최신 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux