🇰🇷 한글 설명
Linux 커널의 IB/mlx5 드라이버에서 CQ(Completion Queue) 조각 버퍼를 초기화할 때 잘못된 버퍼를 참조하는 취약점이 발견되었습니다. CQ 크기 확장 시 잘못된 버퍼를 초기화함으로써 현재 버퍼의 범위를 벗어난 메모리에 접근하게 되어 커널 패닉(Kernel Panic)을 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터의 핵심 운영체제인 리눅스에서 데이터를 처리하는 통로의 크기를 늘릴 때, 엉뚱한 메모리 공간을 건드려 시스템이 갑자기 멈추거나 꺼질 수 있는 문제입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
IB/mlx5: Fix initializing CQ fragments buffer
The function init_cq_frag_buf() can be called to initialize the current CQ
fragments buffer cq->buf, or the temporary cq->resize_buf that is filled
during CQ resize operation.
However, the offending commit started to use function get_cqe() for
getting the CQEs, the issue with this change is that get_cqe() always
returns CQEs from cq->buf, which leads us to initialize the wrong buffer,
and in case of enlarging the CQ we try to access elements beyond the size
of the current cq->buf and eventually hit a kernel panic.
[exception RIP: init_cq_frag_buf+103]
[ffff9f799ddcbcd8] mlx5_ib_resize_cq at ffffffffc0835d60 [mlx5_ib]
[ffff9f799ddcbdb0] ib_resize_cq at ffffffffc05270df [ib_core]
[ffff9f799ddcbdc0] llt_rdma_setup_qp at ffffffffc0a6a712 [llt]
[ffff9f799ddcbe10] llt_rdma_cc_event_action at ffffffffc0a6b411 [llt]
[ffff9f799ddcbe98] llt_rdma_client_conn_thread at ffffffffc0a6bb75 [llt]
[ffff9f799ddcbec8] kthread at ffffffffa66c5da1
[ffff9f799ddcbf50] ret_from_fork_nospec_begin at ffffffffa6d95ddd
Fix it by getting the needed CQE by calling mlx5_frag_buf_get_wqe() that
takes the correct source buffer as a parameter.
📍 영향받는 시스템
Linux kernel (mlx5_ib driver components)
⚔️ 공격 벡터
로컬 공격자가 RDMA 관련 CQ 크기 조정 작업을 유도하여 커널 패닉(DoS)을 발생시킴
🛡️ 대응 방법
mlx5_frag_buf_get_wqe() 함수를 사용하여 올바른 소스 버퍼를 참조하도록 커널 패치를 적용하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 최신 보안 패치 버전인지 확인하십시오.