🇰🇷 한글 설명
Linux 커널의 powerpc/pseries 아키텍처에서 dtl_access_lock이 스핀락 대신 rw_semaphore로 변경되었습니다. 잠금을 보유한 상태에서 kmalloc()이 호출되는데 이는 잠들 수 있는 동작이므로, 기존 잠금 방식에서 컨텍스트 위반 버그가 발생했습니다.
💡 쉬운 설명
리눅스 커널의 IBM Power 서버 전용 기능에서 잘못된 잠금 방식 때문에 시스템 경고나 오류가 발생할 수 있는 문제입니다. 커널 패치를 적용하면 이 문제가 해결됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
powerpc/pseries: Fix dtl_access_lock to be a rw_semaphore
The dtl_access_lock needs to be a rw_sempahore, a sleeping lock, because
the code calls kmalloc() while holding it, which can sleep:
# echo 1 > /proc/powerpc/vcpudispatch_stats
BUG: sleeping function called from invalid context at include/linux/sched/mm.h:337
in_atomic(): 1, irqs_disabled(): 0, non_block: 0, pid: 199, name: sh
preempt_count: 1, expected: 0
3 locks held by sh/199:
#0: c00000000a0743f8 (sb_writers#3){.+.+}-{0:0}, at: vfs_write+0x324/0x438
#1: c0000000028c7058 (dtl_enable_mutex){+.+.}-{3:3}, at: vcpudispatch_stats_write+0xd4/0x5f4
#2: c0000000028c70b8 (dtl_access_lock){+.+.}-{2:2}, at: vcpudispatch_stats_write+0x220/0x5f4
CPU: 0 PID: 199 Comm: sh Not tainted 6.10.0-rc4 #152
Hardware name: IBM pSeries (emulated by qemu) POWER9 (raw) 0x4e1202 0xf000005 of:SLOF,HEAD hv:linux,kvm pSeries
Call Trace:
dump_stack_lvl+0x130/0x148 (unreliable)
__might_resched+0x174/0x410
kmem_cache_alloc_noprof+0x340/0x3d0
alloc_dtl_buffers+0x124/0x1ac
vcpudispatch_stats_write+0x2a8/0x5f4
proc_reg_write+0xf4/0x150
vfs_write+0xfc/0x438
ksys_write+0x88/0x148
system_call_exception+0x1c4/0x5a0
system_call_common+0xf4/0x258
📍 영향받는 시스템
IBM Power(pSeries) 아키텍처에서 동작하는 Linux 커널 6.x 계열 (패치 이전 버전)
⚔️ 공격 벡터
로컬 권한을 가진 사용자가 /proc/powerpc/vcpudispatch_stats에 쓰기를 수행하여 커널 경고 또는 서비스 중단을 유발할 수 있음
🛡️ 대응 방법
배포판 제공 최신 커널로 업데이트하여 dtl_access_lock을 rw_semaphore로 수정한 패치를 적용하고 재부팅
🔧 검증 코드
출력된 커널 버전이 해당 CVE 수정이 포함된 배포판 패치 버전 이상인지 배포판 보안 공지와 비교하여 확인하고, 해당 시스템이 powerpc 아키텍처가 아니면 영향이 없음 (uname -m 으로 확인)