🇰🇷 한글 설명
Linux 커널의 /proc/net/ptype 파일 처리에서 RCU 동기화 부족으로 인해 packet_type 구조체가 제거될 때 장치 포인터에 대한 보호 없이 접근되는 문제입니다. ptype_seq_show()와 ptype_seq_next()에 적절한 메모리 배리어와 READ_ONCE()를 추가하여 동시성 오류를 해결합니다.
💡 쉬운 설명
Linux의 네트워크 정보를 읽을 때 다른 프로세스가 동시에 정보를 수정하면 프로그램이 멈추거나 충돌할 수 있는 문제입니다. 안전한 방식으로 읽고 쓰도록 커널 코드를 수정했습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: add proper RCU protection to /proc/net/ptype
Yin Fengwei reported an RCU stall in ptype_seq_show() and provided
a patch.
Real issue is that ptype_seq_next() and ptype_seq_show() violate
RCU rules.
ptype_seq_show() runs under rcu_read_lock(), and reads pt->dev
to get device name without any barrier.
At the same time, concurrent writers can remove a packet_type structure
(which is correctly freed after an RCU grace period) and clear pt->dev
without an RCU grace period.
Define ptype_iter_state to carry a dev pointer along seq_net_private:
struct ptype_iter_state {
struct seq_net_private p;
struct net_device *dev; // added in this patch
};
We need to record the device pointer in ptype_get_idx() and
ptype_seq_next() so that ptype_seq_show() is safe against
concurrent pt->dev changes.
We also need to add full RCU protection in ptype_seq_next().
(Missing READ_ONCE() when reading list.next values)
Many thanks to Dong Chenchen for providing a repro.
📍 영향받는 시스템
Linux kernel (모든 배포판, 정확한 버전은 배포판별 보안 패치 일정에 따라 상이)
⚔️ 공격 벡터
로컬 사용자가 /proc/net/ptype을 반복 접근하면서 동시에 네트워크 모듈을 조작하여 RCU stall 또는 메모리 접근 오류 유발
🛡️ 대응 방법
영향받는 Linux 배포판의 최신 커널 보안 업데이트를 적용하세요
🔧 검증 코드
실행 중인 커널 버전을 확인하고, 배포판의 보안 업데이트 공지에서 해당 CVE 패치 적용 버전을 확인하여 비교하세요