🔍 CVE-2026-64177

5.5
CVSS Score
MEDIUM
2026-07-19
2026-08-13 15:32
✅ 완료

🇰🇷 한글 설명

Linux 커널의 phonet/pep 구성 요소에서 네트워크 패킷 전달 시 Bottom Half(BH) 상태가 일관되지 않게 관리되는 취약점이 발견되었습니다. 이로 인해 프로세스 컨텍스트에서 소켓 잠금을 획득할 때 BH가 활성화된 상태가 되어, 동일 CPU에서 소프트인터럽트가 발생할 경우 자가 데드락(Self-deadlock)이 발생할 수 있습니다.

💡 쉬운 설명

네트워크 데이터를 처리하는 과정에서 시스템의 작업 순서가 꼬여 컴퓨터가 멈춰버릴 수 있는 문제입니다. 특정 상황에서 데이터 처리 방식이 서로 충돌하여 시스템이 스스로를 기다리며 응답하지 않는 상태가 됩니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: phonet/pep: disable BH around forwarded sk_receive_skb() The networking receive path is usually run from softirq context, but protocols that take the socket lock may have packets stored in the backlog and processed later from process context. In that case release_sock() -> __release_sock() drops the slock with spin_unlock_bh() and then calls sk->sk_backlog_rcv() with bottom halves enabled. Typical sk_backlog_rcv handlers process the socket whose backlog is being drained, so the BH state at entry is irrelevant for the slocks they touch. pep_do_rcv() is different: when the inbound skb targets an existing PEP pipe, it forwards the skb to a different *child* socket via sk_receive_skb(). That helper takes the child slock with bh_lock_sock_nested(), which is just spin_lock_nested() and assumes BH is already off. The same child slock therefore ends up acquired with BH on (process path) and with BH off (softirq path): process context softirq context --------------- --------------- release_sock(listener) __netif_receive_skb() __release_sock() phonet_rcv() spin_unlock_bh() __sk_receive_skb(listener) [BH now ENABLED] [BH already disabled] sk_backlog_rcv: sk_backlog_rcv: pep_do_rcv() pep_do_rcv() sk_receive_skb(child) sk_receive_skb(child) bh_lock_sock_nested(child) bh_lock_sock_nested(child) => SOFTIRQ-ON-W => IN-SOFTIRQ-W Lockdep flags this as inconsistent lock state, and it can become a real self-deadlock if a softirq on the same CPU tries to receive to the same child socket while its slock is held in the BH-enabled path: WARNING: inconsistent lock state inconsistent {SOFTIRQ-ON-W} -> {IN-SOFTIRQ-W} usage. (slock-AF_PHONET/1){+.?.}-{3:3}, at: __sk_receive_skb+0x1cf/0x900 __sk_receive_skb net/core/sock.c:563 sk_receive_skb include/net/sock.h:2022 [inline] pep_do_rcv net/phonet/pep.c:675 sk_backlog_rcv include/net/sock.h:1190 __release_sock net/core/sock.c:3216 release_sock net/core/sock.c:3815 pep_sock_accept net/phonet/pep.c:879 Wrap the forwarded sk_receive_skb() in local_bh_disable() / local_bh_enable() so the child slock is always acquired with BH off. local_bh_disable() nests safely on the softirq path. Discovered via in-house syzkaller fuzzing; the same root cause also on the linux-6.1.y syzbot dashboard as extid 44f0626dd6284f02663c. Reproduced under KASAN + LOCKDEP + PROVE_LOCKING, reproducer: https://pastebin.com/A3t8xzCR

📍 영향받는 시스템

Linux kernel (phonet/pep 모듈 사용 환경)

⚔️ 공격 벡터

특수하게 조작된 네트워크 패킷을 전송하여 커널의 소켓 잠금 메커니즘을 유도함으로써 데드락 발생

🛡️ 대응 방법

Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 sk_receive_skb() 호출 시 BH 제어가 적용되도록 수정

🔧 검증 코드

출력된 커널 버전이 취약점이 해결된 패치 버전 이후인지 확인하십시오.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H

💻 영향받는 소프트웨어

Linux Kernel