🇰🇷 한글 설명
Linux 커널의 nfsd에서 unconfirmed retry race 발생 시 미리 할당된 openowner가 누수되는 취약점입니다. 특정 조건에서 race condition이 발생하면 기존에 할당된 메모리 포인터가 덮어씌워져 slab 객체와 소유자 이름 버퍼가 해제되지 않고 누수됩니다.
💡 쉬운 설명
NFS 서버를 사용할 때 특정 상황을 인위적으로 만들어 메모리가 조금씩 새어나가게 만드는 결함입니다. 이 현상이 반복되면 시스템의 메모리가 부족해져 서버가 느려지거나 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nfsd: avoid leaking pre-allocated openowner on unconfirmed retry race
When find_or_alloc_open_stateowner() encounters an unconfirmed owner, it
calls release_openowner() and sets oo = NULL. Control then falls through
past the `if (oo)` guard -- which would have freed any pre-allocated
`new` -- and unconditionally executes `new = alloc_stateowner(...)`. If
`new` was already allocated on a prior iteration, the pointer is
silently overwritten and the previous allocation (slab object + owner
name buffer) is leaked.
This requires a race: two NFSv4.0 OPEN threads with the same owner
string, where a concurrent thread inserts a new unconfirmed owner into
the hash between retry iterations. The window is narrow but repeatable
under adversarial conditions.
Fix by adding `goto retry` after `oo = NULL` so the already-allocated
`new` is reused on the next iteration rather than overwritten.
📍 영향받는 시스템
Linux Kernel (nfsd 구성 요소 포함 버전)
⚔️ 공격 벡터
동일한 소유자 문자열을 가진 두 개의 NFSv4.0 OPEN 스레드를 이용한 레이스 컨디션 공격
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.