🇰🇷 한글 설명
Linux 커널의 net/smc 구성 요소에서 smc_cdc_tx_handler() 함수 호출 시 NULL 포인터 참조로 인해 커널 패닉이 발생할 수 있는 취약점입니다. smc_smcr_terminate_all()과 smc_buf_create() 사이의 레이스 컨디션으로 인해 발생하며, 연결 종료 과정에서 발생할 수 있습니다.
💡 쉬운 설명
시스템이 네트워크 연결을 끊는 과정에서 데이터 처리 순서가 꼬여 컴퓨터가 갑자기 멈추거나 재부팅될 수 있는 문제입니다. 특정 네트워크 통신 방식(SMC)을 사용할 때 발생할 수 있는 오류입니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/smc: fix NULL sndbuf_desc in smc_cdc_tx_handler()
When performing a stress test on SMC-R by rmmod mlx5_ib driver
during the wrk/nginx test, we found that there is a probability
of triggering a panic while terminating all link groups.
This issue dues to the race between smc_smcr_terminate_all()
and smc_buf_create().
smc_smcr_terminate_all
smc_buf_create
/* init */
conn->sndbuf_desc = NULL;
...
__smc_lgr_terminate
smc_conn_kill
smc_close_abort
smc_cdc_get_slot_and_msg_send
__softirqentry_text_start
smc_wr_tx_process_cqe
smc_cdc_tx_handler
READ(conn->sndbuf_desc->len);
/* panic dues to NULL sndbuf_desc */
conn->sndbuf_desc = xxx;
This patch tries to fix the issue by always to check the sndbuf_desc
before send any cdc msg, to make sure that no null pointer is
seen during cqe processing.
📍 영향받는 시스템
SMC(Shared Memory Communications) 기능을 사용하는 Linux 커널 버전
⚔️ 공격 벡터
네트워크 연결 종료 시 발생하는 레이스 컨디션을 이용한 로컬/원격 서비스 거부(DoS)
🛡️ 대응 방법
SMC 관련 NULL 포인터 체크 로직이 포함된 최신 Linux 커널 패치 적용
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 패치 버전인지 확인합니다.