🇰🇷 한글 설명
Linux 커널의 nfsd 구성 요소에서 rpc_status_get_dumpit 함수가 메모리 읽기 장벽(smp_rmb)을 누락하여 발생하는 취약점입니다. ARM이나 POWER와 같은 약한 순서 보장 아키텍처에서 CPU가 데이터 읽기 순서를 재배치함으로써, 데이터가 수정되는 동안 일관되지 않은 값을 읽을 수 있는 문제가 있습니다.
💡 쉬운 설명
컴퓨터가 데이터를 읽는 순서가 꼬여서, 데이터가 바뀌는 도중에 잘못된 정보를 읽어버릴 수 있는 문제입니다. 이로 인해 시스템이 예상치 못한 동작을 하거나 데이터 오류가 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nfsd: add missing read barrier to rpc_status_get dumpit seqcount retry
The hand-rolled seqcount-like protocol in nfsd_nl_rpc_status_get_dumpit()
is missing a read memory barrier (smp_rmb) before its second counter
check. The standard kernel read_seqcount_retry() includes smp_rmb()
to ensure that all data reads complete before the counter is re-checked.
Without this barrier, on weakly-ordered architectures (ARM, POWER),
the CPU may reorder field reads past the second counter check, making
the retry logic ineffective: it could observe a consistent counter pair
while reading fields that have been concurrently modified by the writer.
Add smp_rmb() before the second counter check to order the field reads
ahead of it, matching the barrier semantics of the standard seqcount
read-side. The begin-side smp_load_acquire() already pairs with the
smp_store_release() in nfsd_dispatch(); with the smp_rmb() now ordering
the field reads, the retry check no longer needs acquire semantics and
reads the counter with a plain READ_ONCE(), as read_seqcount_retry()
does.
[ cel: Use READ_ONCE instead of smp_load_acquire() ]
📍 영향받는 시스템
Linux kernel (nfsd module 사용 환경, 특히 ARM 및 POWER 아키텍처)
⚔️ 공격 벡터
로컬 또는 네트워크를 통한 RPC 상태 요청을 이용한 데이터 일관성 파괴 및 레이스 컨디션 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 smp_rmb() 장벽이 포함된 수정본을 적용해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인합니다.