🇰🇷 한글 설명
Linux 커널의 RDMA/rxe 드라이버에서 RESPST_ERR_RNR 처리 시 rxe_recheck_mr()가 증가시킨 MR(메모리 영역)의 참조 카운트를 해제하지 않아 메모리 누수가 발생하는 문제가 해결되었습니다. 이로 인해 해당 MR 정리 과정에서 커널 경고(WARNING)가 발생할 수 있었습니다. 수정은 RESPST_ERR_RNR 경로에서 rxe_put(mr)를 호출하여 참조 카운트를 올바르게 감소시키는 것입니다.
💡 쉬운 설명
컴퓨터의 고속 네트워크 통신 기능에서 사용하던 메모리 조각을 다 쓰고도 반환하지 않는 버그가 있었습니다. 이 버그를 고쳐서 메모리가 낭비되거나 커널 경고가 나타나지 않도록 했습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
RDMA/rxe: Fix mr leak in RESPST_ERR_RNR
rxe_recheck_mr() will increase mr's ref_cnt, so we should call rxe_put(mr)
to drop mr's ref_cnt in RESPST_ERR_RNR to avoid below warning:
WARNING: CPU: 0 PID: 4156 at drivers/infiniband/sw/rxe/rxe_pool.c:259 __rxe_cleanup+0x1df/0x240 [rdma_rxe]
...
Call Trace:
rxe_dereg_mr+0x4c/0x60 [rdma_rxe]
ib_dereg_mr_user+0xa8/0x200 [ib_core]
ib_mr_pool_destroy+0x77/0xb0 [ib_core]
nvme_rdma_destroy_queue_ib+0x89/0x240 [nvme_rdma]
nvme_rdma_free_queue+0x40/0x50 [nvme_rdma]
nvme_rdma_teardown_io_queues.part.0+0xc3/0x120 [nvme_rdma]
nvme_rdma_error_recovery_work+0x4d/0xf0 [nvme_rdma]
process_one_work+0x582/0xa40
? pwq_dec_nr_in_flight+0x100/0x100
? rwlock_bug.part.0+0x60/0x60
worker_thread+0x2a9/0x700
? process_one_work+0xa40/0xa40
kthread+0x168/0x1a0
? kthread_complete_and_exit+0x20/0x20
ret_from_fork+0x22/0x30
📍 영향받는 시스템
RDMA Soft-RoCE(rdma_rxe) 드라이버를 사용하는 수정 이전의 Linux 커널 버전
⚔️ 공격 벡터
로컬 또는 네트워크 접근 권한을 가진 공격자가 RNR 상황을 반복 유발하여 메모리 누수를 누적시키는 서비스 거부(DoS) 형태로 악용될 수 있음
🛡️ 대응 방법
배포판 제공 최신 커널 업데이트를 적용하고 재부팅하거나, 해당 수정이 포함된 Linux 커널 안정 버전으로 업그레이드하십시오.
🔧 검증 코드
커널 버전이 수정이 포함된 최신 배포판 커널 버전 이상인지 확인하고, rdma_rxe 모듈이 로드되지 않았다면 이 취약점에 노출되지 않은 것입니다.
uname -r && (lsmod | grep rdma_rxe || echo 'rdma_rxe 모듈 미로드') && (dpkg -l linux-image-$(uname -r) 2>/dev/null || rpm -q kernel 2>/dev/null)