🇰🇷 한글 설명
리눅스 커널의 gve 드라이버에서 메모리 부족 시 Rx 큐가 영구적으로 중단되는 취약점이 발견되었습니다. 메모리 할당 실패로 인해 버퍼가 임계값 미만으로 떨어지면 NAPI 스케줄링이 중단되어 네트워크 수신이 불가능해집니다. 이를 해결하기 위해 starvation recovery 타이머를 도입하여 주기적으로 NAPI를 재스케줄링하도록 수정되었습니다.
💡 쉬운 설명
컴퓨터의 메모리가 부족할 때 네트워크 데이터를 받는 통로가 꽉 막혀버려 인터넷 연결이 끊기는 문제입니다. 이를 방지하기 위해 메모리가 다시 확보되면 통로를 자동으로 다시 열어주는 안전장치를 추가했습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
gve: fix Rx queue stall on alloc failure
When the system is under extreme memory pressure, page allocations can
fail during the Rx buffer refill loop. If the number of buffers posted
to hardware falls below a critical low threshold and the refill loop
exits due to allocation failures, the queue can stall:
1. The device drops incoming packets because there are no descriptors.
2. Since no packets are processed, no Rx completions are generated.
3. Because no completions occur, NAPI is never scheduled, preventing
the refill loop from running again even after memory is freed.
This results in a permanent queue stall.
Resolve this by introducing a starvation recovery timer for each Rx queue.
If the number of buffers posted to hardware falls below a critical low
threshold, start a timer to periodically reschedule NAPI. Once NAPI runs
and successfully refills the queue above the threshold, the timer is
not rescheduled.
The threshold is set to 32 because a single maximum-sized Receive Segment
Coalescing (RSC) packet can consume up to 19 descriptors in the Rx path.
Lower thresholds (such as 8 or 16) would be insufficient to process a
complete maximum-sized RSC packet, risking packet drops or unexpected
hardware behavior under memory pressure. Setting the threshold to 32
guarantees a safe margin to handle at least one full RSC packet.
📍 영향받는 시스템
Linux kernel (gve driver)
⚔️ 공격 벡터
시스템 메모리 고갈을 유도하여 네트워크 수신 큐를 마비시키는 DoS(서비스 거부) 공격
🛡️ 대응 방법
gve 드라이버의 starvation recovery 타이머가 포함된 최신 리눅스 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 패치가 적용된 최신 버전인지 확인
📊 CVSS Vector String
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
💻 영향받는 소프트웨어
NVIDIA vGPU Guest Driver for Linux