🇰🇷 한글 설명
리눅스 커널의 nvdimm/btt 구성 요소에서 BTT 레인 획득 시 선점(preemption)을 적절히 처리하지 못하는 레이스 컨디션 취약점이 발견되었습니다. 기존의 스핀락 기반 재귀 모델이 레인이 선점 가능해짐에 따라 유효성을 잃어, 여러 작업이 동일한 레인에 동시에 접근하여 데이터가 조용히 손상될 수 있습니다.
💡 쉬운 설명
데이터를 저장하는 통로를 잠그는 방식에 문제가 있어, 여러 작업이 동시에 같은 통로를 사용하게 될 수 있습니다. 이로 인해 저장된 데이터가 예기치 않게 깨지거나 손상될 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nvdimm/btt: Handle preemption in BTT lane acquisition
BTT lanes serialize access to per-lane metadata and workspace state
during BTT I/O. The btt-check unit test reports data mismatches during
BTT writes due to a race in lane acquisition that can lead to silent
data corruption.
The existing lane model uses a spinlock together with a per-CPU
recursion count. That recursion model stopped being valid after BTT
lanes became preemptible: another task can run on the same CPU,
observe a non-zero recursion count, bypass locking, and use the same
lane concurrently.
BTT lanes are also held across arena_write_bytes() calls. That path
reaches nsio_rw_bytes(), which flushes writes with nvdimm_flush().
Some provider flush callbacks can sleep, making a spinlock the wrong
primitive for the lane lifetime.
Replace the spinlock-based recursion model with a dynamically
allocated per-lane mutex array and take the lane lock
unconditionally.
Add might_sleep() to catch any future atomic-context caller.
Found with the ndctl unit test btt-check.sh.
📍 영향받는 시스템
Linux kernel (nvdimm/btt 모듈 사용 시스템)
⚔️ 공격 벡터
로컬 시스템에서 특정 I/O 작업을 유도하여 레이스 컨디션을 발생시킴으로써 데이터 손상 유도
🛡️ 대응 방법
스핀락 기반 재귀 모델을 동적 할당된 per-lane 뮤텍스(mutex) 배열로 교체한 최신 커널로 업데이트
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 패치된 최신 보안 업데이트 버전인지 확인