🇰🇷 한글 설명
Linux 커널의 packet 서브시스템에서 링 재구성 시 압력 해제(pressure clearing) 동기화 문제가 발견되었습니다. sk_receive_queue.lock 해제 후 수신 모드를 업데이트하는 과정에서 레이스 컨디션이 발생하여, packet_poll() 또는 packet_recvmsg()가 오래되거나 NULL인 링 저장소를 참조하여 시스템 오류를 유발할 수 있습니다.
💡 쉬운 설명
데이터를 받는 통로를 새로 설정하는 도중에 다른 작업이 끼어들어 잘못된 메모리 주소를 참조하게 되는 문제입니다. 이로 인해 시스템이 갑자기 멈추거나 오류가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
packet: synchronize pressure clearing with ring reconfiguration
packet_set_ring() updates the RX ring state under sk_receive_queue.lock,
but used to publish the tpacket receive mode through po->prot_hook.func
after releasing that lock. packet_poll() and packet_recvmsg() can then
run the pressure clearing path after the ring has been cleared while
still seeing tpacket_rcv, causing __packet_rcv_has_room() to dereference
stale or NULL ring storage.
Move the existing receive hook assignment into the same
sk_receive_queue.lock section as the ring state update. Keep the
assignment otherwise unchanged, including on TX ring reconfiguration, to
avoid adding behavior changes that are not required for the fix.
Serialize packet_recvmsg() pressure clearing with the same queue lock
only after PACKET_SOCK_PRESSURE has been observed. If the flag is clear
and the socket has moved away from tpacket_rcv, packet_set_ring() has
already detached the socket and waited for synchronize_net(), so no new
packet input can set the flag again.
packet_poll() already holds sk_receive_queue.lock, so it uses the new
unlocked helper directly.
📍 영향받는 시스템
Linux Kernel (packet 서브시스템을 사용하는 버전)
⚔️ 공격 벡터
특수하게 조작된 네트워크 패킷을 전송하여 커널 내의 레이스 컨디션을 유발하는 방식
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전을 확인하여 해당 취약점이 해결된 최신 패치 버전인지 확인하십시오.