🇰🇷 한글 설명
Linux 커널의 ALSA ctxfi 드라이버에서 CT_PTP_NUM 설정값이 1에서 4로 증가하면서 발생한 메모리 관리 오류입니다. ct_vm_map() 함수가 할당된 범위를 초과하여 페이지 테이블 엔트리에 접근함으로써 페이지 폴트(Page Fault) 및 시스템 오류를 유발할 수 있습니다.
💡 쉬운 설명
사운드 카드 관련 소프트웨어가 메모리를 사용할 때, 정해진 공간보다 더 넓은 영역을 사용하려고 시도하다가 시스템이 멈추거나 오류가 발생하는 문제입니다. 이를 해결하기 위해 메모리 사용 범위를 다시 안전한 수준으로 제한하는 조치가 이루어졌습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ALSA: ctxfi: Limit PTP to a single page
Commit 391e69143d0a increased CT_PTP_NUM from 1 to 4 to support 256
playback streams, but the additional pages are not used by the card
correctly. The CT20K2 hardware already has multiple VMEM_PTPAL
registers, but using them separately would require refactoring the
entire virtual memory allocation logic.
ct_vm_map() always uses PTEs in vm->ptp[0].area regardless of
CT_PTP_NUM. On AMD64 systems, a single PTP covers 512 PTEs (2M). When
aggregate memory allocations exceed this limit, ct_vm_map() tries to
access beyond the allocated space and causes a page fault:
BUG: unable to handle page fault for address: ffffd4ae8a10a000
Oops: Oops: 0002 [#1] SMP PTI
RIP: 0010:ct_vm_map+0x17c/0x280 [snd_ctxfi]
Call Trace:
atc_pcm_playback_prepare+0x225/0x3b0
ct_pcm_playback_prepare+0x38/0x60
snd_pcm_do_prepare+0x2f/0x50
snd_pcm_action_single+0x36/0x90
snd_pcm_action_nonatomic+0xbf/0xd0
snd_pcm_ioctl+0x28/0x40
__x64_sys_ioctl+0x97/0xe0
do_syscall_64+0x81/0x610
entry_SYSCALL_64_after_hwframe+0x76/0x7e
Revert CT_PTP_NUM to 1. The 256 SRC_RESOURCE_NUM and playback_count
remain unchanged.
📍 영향받는 시스템
Linux kernel (ALSA ctxfi driver component)
⚔️ 공격 벡터
로컬 사용자가 특정 사운드 하드웨어 설정을 조작하여 커널 메모리 오류를 유발하는 방식
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 CT_PTP_NUM이 1로 복구된 커밋을 적용해야 합니다.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 커밋(391e69143d0a) 이후의 버전인지 확인합니다.