🇰🇷 한글 설명
Linux 커널의 mana 네트워크 드라이버에서 napi_complete_done() 호출 후 per-CQ 변수인 work_done에 대한 레이스 컨디션(경쟁 상태)이 발생할 수 있습니다. 이로 인해 다른 CPU가 동시에 변수에 접근하여 값을 변경할 경우, 프로세스가 중단되지 않고 계속 실행되어 메모리 손상 및 커널 패닉을 유발할 수 있습니다.
💡 쉬운 설명
네트워크를 처리하는 과정에서 두 개의 작업이 동시에 같은 데이터를 건드려 충돌이 발생하는 문제입니다. 이 충돌로 인해 컴퓨터 시스템이 갑자기 멈추거나 데이터가 망가질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
net: mana: Fix race on per-CQ variable napi work_done
After calling napi_complete_done(), the NAPIF_STATE_SCHED bit may be
cleared, and another CPU can start napi thread and access per-CQ variable,
cq->work_done. If the other thread (for example, from busy_poll) sets
it to a value >= budget, this thread will continue to run when it should
stop, and cause memory corruption and panic.
To fix this issue, save the per-CQ work_done variable in a local variable
before napi_complete_done(), so it won't be corrupted by a possible
concurrent thread after napi_complete_done().
Also, add a flag bit to advertise to the NIC firmware: the NAPI work_done
variable race is fixed, so the driver is able to reliably support features
like busy_poll.
📍 영향받는 시스템
Linux kernel (mana network driver 사용 시스템)
⚔️ 공격 벡터
네트워크 트래픽을 이용한 레이스 컨디션 유도 및 메모리 오염
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 취약점이 해결된 패치 버전인지 확인합니다.