🇰🇷 한글 설명
Linux 커널의 RDMA/rxe 드라이버에서 rxe_create_qp 호출 중 오류가 발생하면 rxe_qp_from_init의 에러 핸들러가 qp->scq와 qp->rcq를 NULL로 설정합니다. 이후 rxe_put을 통해 호출되는 rxe_qp_do_cleanup이 이 포인터들을 검사 없이 역참조하여 NULL 포인터 역참조가 발생합니다.
💡 쉬운 설명
네트워크 고속 통신용 커널 드라이버에서 오류 처리 중 빈 포인터를 사용하는 결함입니다. 이로 인해 시스템이 비정상 종료(커널 패닉)될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
RDMA/rxe: Fix BUG: KASAN: null-ptr-deref in rxe_qp_do_cleanup
The function rxe_create_qp calls rxe_qp_from_init. If some error
occurs, the error handler of function rxe_qp_from_init will set
both scq and rcq to NULL.
Then rxe_create_qp calls rxe_put to handle qp. In the end,
rxe_qp_do_cleanup is called by rxe_put. rxe_qp_do_cleanup directly
accesses scq and rcq before checking them. This will cause
null-ptr-deref error.
The call graph is as below:
rxe_create_qp {
...
rxe_qp_from_init {
...
err1:
...
qp->rcq = NULL; <---rcq is set to NULL
qp->scq = NULL; <---scq is set to NULL
...
}
qp_init:
rxe_put{
...
rxe_qp_do_cleanup {
...
atomic_dec(&qp->scq->num_wq); <--- scq is accessed
...
atomic_dec(&qp->rcq->num_wq); <--- rcq is accessed
}
}
📍 영향받는 시스템
패치 이전의 Linux 커널 (RDMA/rxe 드라이버 포함 버전)
⚔️ 공격 벡터
로컬 사용자가 RDMA 큐 페어 생성을 유도하는 오류 조건을 만들어 커널 패닉 또는 서비스 거부를 일으킬 수 있음
🛡️ 대응 방법
배포판 제공 최신 커널로 업데이트하고 재부팅하여 해당 수정 패치를 적용
🔧 검증 코드
출력된 커널 버전이 수정 패치가 포함된 버전 이상인지 배포판 보안 공지와 비교하고, rdma_rxe 모듈이 없으면 이 취약점의 영향을 받지 않습니다.
uname -r && (lsmod | grep -i rdma_rxe || echo 'rdma_rxe 모듈 미로드')