🇰🇷 한글 설명
Linux 커널의 네트워크 스케줄러(net_sched)에서 ->change() 연산으로 큐 한도를 줄일 때 gso_skb 리스트를 비우지 않아 문제가 발생합니다. 이로 인해 sch->limit과 sch->q.qlen만 비교하면 NULL 포인터 역참조가 일어날 수 있습니다. 패치는 qdisc_dequeue_internal() 헬퍼를 도입해 codel, fq, fq_codel, fq_pie, hhf, pie의 ->change()에서 gso_skb와 메인 큐를 모두 정리하도록 합니다.
💡 쉬운 설명
네트워크 패킷을 줄 세워 두는 대기열 크기를 줄일 때, 일부 패킷이 별도 목록에 남아 프로그램이 잘못된 메모리를 참조할 수 있었습니다. 이 문제는 대기열 정리 로직을 보완해 해결되었습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net_sched: Flush gso_skb list too during ->change()
Previously, when reducing a qdisc's limit via the ->change() operation, only
the main skb queue was trimmed, potentially leaving packets in the gso_skb
list. This could result in NULL pointer dereference when we only check
sch->limit against sch->q.qlen.
This patch introduces a new helper, qdisc_dequeue_internal(), which ensures
both the gso_skb list and the main queue are properly flushed when trimming
excess packets. All relevant qdiscs (codel, fq, fq_codel, fq_pie, hhf, pie)
are updated to use this helper in their ->change() routines.
📍 영향받는 시스템
패치 이전의 Linux 커널 (codel, fq, fq_codel, fq_pie, hhf, pie 큐잉 디시플린을 사용하는 시스템)
⚔️ 공격 벡터
권한이 있는 로컬 사용자가 큐잉 디시플린의 한도를 변경하는 조작을 통해 커널 충돌(NULL 포인터 역참조)을 유발할 수 있습니다.
🛡️ 대응 방법
배포판에서 제공하는 CVE-2025-37992 수정이 포함된 최신 커널로 업데이트하고 재부팅합니다.
🔧 검증 코드
출력된 커널 버전이 배포판의 수정 버전 이상인지 벤더 보안 공지와 대조하고, tc 결과로 현재 사용 중인 큐잉 디시플린 종류를 확인합니다.
uname -r; tc qdisc show 2>/dev/null | head -n 5