🇰🇷 한글 설명
Linux 커널의 net/smc 구성 요소에서 smc_msg_event 트레이스포인트가 활성화된 경우, SMC-D 연결 시 conn->lnk 포인터를 참조할 때 NULL 역참조가 발생하여 시스템이 충돌할 수 있는 취약점입니다. 이 문제는 SMC-R과 달리 SMC-D에서는 해당 포인터가 NULL로 설정되어 있어 발생하며, 커널 패닉(Oops)을 유발합니다.
💡 쉬운 설명
리눅스 운영체제의 특정 통신 기능(SMC)을 사용할 때, 시스템의 기록 기능(트레이스포인트)이 켜져 있으면 컴퓨터가 갑자기 멈추거나 꺼질 수 있는 오류입니다. 특정 통신 방식(SMC-D)을 사용할 때 존재하지 않는 주소를 참조하려고 시도하기 때문에 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net/smc: avoid NULL deref of conn->lnk in smc_msg_event tracepoint
The smc_msg_event tracepoint class, shared by smc_tx_sendmsg and
smc_rx_recvmsg, unconditionally dereferences smc->conn.lnk:
__string(name, smc->conn.lnk->ibname)
conn->lnk is only set for SMC-R; for SMC-D it is NULL. Other code on
these paths already handles this (e.g. !conn->lnk in
SMC_STAT_RMB_TX_SIZE_SMALL()). With the tracepoint enabled, the first
sendmsg()/recvmsg() on an SMC-D socket crashes:
Oops: general protection fault, probably for non-canonical address
KASAN: null-ptr-deref in range [...]
RIP: 0010:strlen+0x1e/0xa0
Call Trace:
trace_event_raw_event_smc_msg_event (net/smc/smc_tracepoint.h:44)
smc_rx_recvmsg (net/smc/smc_rx.c:515)
smc_recvmsg (net/smc/af_smc.c:2859)
__sys_recvfrom (net/socket.c:2315)
__x64_sys_recvfrom (net/socket.c:2326)
do_syscall_64
The faulting address 0x3e0 is offsetof(struct smc_link, ibname),
confirming the NULL ->lnk deref. Enabling the tracepoint requires
root, but the trigger itself is unprivileged: socket(AF_SMC, ...) has
no capability check, and SMC-D negotiation needs no admin step on
s390 or on x86 with the loopback ISM device loaded.
Log an empty device name for SMC-D instead of dereferencing NULL.
📍 영향받는 시스템
Linux Kernel (SMC-D 프로토콜을 사용하는 시스템)
⚔️ 공격 벡터
권한이 없는 사용자가 SMC-D 소켓을 생성하고 통신을 시도하여 커널 패닉 유도 (Local)
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 NULL 포인터 참조 로직을 수정해야 합니다.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 보안 공지(CVE-2026-52941)와 대조합니다.