🇰🇷 한글 설명
Linux 커널의 nvmet 구성 요소에서 네임스페이스를 비활성화할 때 발생하는 크래시 취약점입니다. 네임스페이스를 비활성화하기 전 대기 중인 I/O 작업이 완료되었는지 확인하는 과정이 누락되어 시스템 오류가 발생할 수 있습니다.
💡 쉬운 설명
컴퓨터의 저장 장치 관리 기능이 꺼질 때, 아직 진행 중인 작업이 남아있음에도 불구하고 강제로 종료되어 시스템이 멈추거나 오류가 발생하는 문제입니다. 작업이 모두 끝날 때까지 기다리는 안전장치가 부족하여 발생합니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nvmet: Fix crash when a namespace is disabled
The namespace percpu counter protects pending I/O, and we can
only safely diable the namespace once the counter drop to zero.
Otherwise we end up with a crash when running blktests/nvme/058
(eg for loop transport):
[ 2352.930426] [ T53909] Oops: general protection fault, probably for non-canonical address 0xdffffc0000000005: 0000 [#1] PREEMPT SMP KASAN PTI
[ 2352.930431] [ T53909] KASAN: null-ptr-deref in range [0x0000000000000028-0x000000000000002f]
[ 2352.930434] [ T53909] CPU: 3 UID: 0 PID: 53909 Comm: kworker/u16:5 Tainted: G W 6.13.0-rc6 #232
[ 2352.930438] [ T53909] Tainted: [W]=WARN
[ 2352.930440] [ T53909] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.16.3-3.fc41 04/01/2014
[ 2352.930443] [ T53909] Workqueue: nvmet-wq nvme_loop_execute_work [nvme_loop]
[ 2352.930449] [ T53909] RIP: 0010:blkcg_set_ioprio+0x44/0x180
as the queue is already torn down when calling submit_bio();
So we need to init the percpu counter in nvmet_ns_enable(), and
wait for it to drop to zero in nvmet_ns_disable() to avoid having
I/O pending after the namespace has been disabled.
📍 영향받는 시스템
Linux kernel (특히 6.13.0-rc6 및 관련 nvmet 모듈 사용 버전)
⚔️ 공격 벡터
로컬 권한을 가진 사용자가 특정 I/O 작업과 네임스페이스 비활성화를 동시에 수행하여 시스템 크래시 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 nvmet_ns_disable()의 동기화 로직 적용
🔧 검증 코드
출력된 커널 버전이 취약점이 해결된 패치 버전인지 확인