🇰🇷 한글 설명
Linux 커널의 xprtrdma 구성 요소에서 RDMA 장치 제거와 NFS/RDMA 마운트 간의 레이스 컨디션 취약점이 발견되었습니다. 장치 제거 알림이 마운트 프로세스의 ID 할당 전에 발생할 경우, NULL 포인터 역참조로 인해 커널 패닉(Crash)이 발생할 수 있습니다.
💡 쉬운 설명
컴퓨터가 네트워크 장치를 제거하는 순간과 새로운 연결을 만드는 순간이 겹칠 때 발생하는 오류입니다. 이 과정에서 시스템이 잘못된 메모리 주소를 참조하게 되어 컴퓨터가 갑자기 멈추거나 꺼질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
xprtrdma: Initialize re_id before removal registration
rpcrdma_create_id() registers ep->re_rn with the rpcrdma ib_client
before returning the new rdma_cm_id to rpcrdma_ep_create(). However
rpcrdma_ep_create() currently stores that pointer in ep->re_id only
after rpcrdma_create_id() returns.
A local administrator can race an NFS/RDMA mount against RDMA device
removal. If rpcrdma_remove_one() observes the just-registered
notification before rpcrdma_ep_create() assigns ep->re_id,
rpcrdma_ep_removal_done() calls trace_xprtrdma_device_removal(NULL).
The tracepoint dereferences id->device->name and copies
id->route.addr.dst_addr, so the callback can crash the kernel with a
NULL pointer dereference.
Store the rdma_cm_id in ep->re_id immediately before publishing
ep->re_rn. The existing error path still destroys the id directly if
registration fails; ep is then freed by the caller without using
ep->re_id. Remove the later duplicate assignment in rpcrdma_ep_create().
📍 영향받는 시스템
Linux kernel (xprtrdma/rpcrdma 관련 모듈 사용 시스템)
⚔️ 공격 벡터
로컬 관리자가 RDMA 장치 제거와 NFS/RDMA 마운트 작업을 동시에 수행하여 레이스 컨디션 유도
🛡️ 대응 방법
커널 패치를 적용하여 rdma_cm_id가 ep->re_id에 즉시 저장되도록 수정된 최신 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이상인지 확인