CVE-2026-99093 in Linux
요약
\~에 의해 VulDB • 2026. 10. 26.
리눅스 커널에서 다음 취약점이 해결되었습니다:
mm: 부팅 중에는 지연된 커널 페이지 테이블 해제를 예약하지 않음
예를 들어, 부트타임 함수 트레이서와 필터(다음과 같이)를 사용하여 부팅할 경우
ftrace=function ftrace_filter=pud_free_pmd_page
7.3-rc4에서 트레이서가 시작되는 즉시 패닉이 발생합니다:
[ 23.531178] Starting tracer 'function'
[ 23.675800] Oops: general protection fault, probably for non-canonical address 0xdffffc0000000038: 0000 [#1] SMP KASAN NOPTI
[ 23.819917] KASAN: null-ptr-deref in range [0x00000000000001c0-0x00000000000001c7]
[ 23.964025] CPU: 0 UID: 0 PID: 0 Comm: swapper Not tainted 7.3.0-rc4-fe2ec83746e5-with-fixes-v2+ #195 PREEMPT(undef)
[ 24.252248] RIP: 0010:__queue_work+0xab/0xf00
[ 25.981629] Call Trace:
[ 26.125727] <TASK>
[ 26.413912] ? pagetable_free_kernel+0x20/0x120
[ 26.990283] queue_work_on+0x97/0xf0
[ 27.134382] __cpa_collapse_large_pages+0x501/0x6f0
[ 27.566662] cpa_flush+0x394/0x620
[ 27.998953] change_page_attr_set_clr+0x321/0x4a0
[ 29.151729] set_memory_rox+0xa2/0xf0
[ 29.584018] create_trampoline+0x431/0x6f0
... [ 44.343347] Kernel panic - not syncing: Attempted to kill the idle task!
부트타임 트레이서는 early_trace_init()에서 시작되며, 이는 workqueue_init_early() 이전에 실행됩니다. 트랩도메인을 읽기 전용으로 분할하면 큰 페이지가 분리되고, CPA(Change Page Attribute)는 이를 즉시 다시 병합합니다. 이 분리된 테이블은 커밋 9e4a3ec3411b("x86/mm/pat: Allocate split page tables as kernel page tables") 이후로 커널 페이지 테이블이 되었으므로, collapse 작업은 pagetable_free_kernel()을 통해 해당 테이블을 해제하며, 이는 system_percpu_wq에 작업을 큐에 추가합니다. 그러나 이 시점에서 system_percpu_wq는 아직 NULL 상태입니다. 해당 커밋 자체는 정확하지만, workqueue가 존재하기 전에 CPA가 pagetable_free_kernel()에 도달하도록 허용하는 문제가 있습니다.
테이블을 리스트에 계속 유지하되, 시스템이 여전히 부팅 중일 때는 작업을 예약하지 않습니다. core_initcall은 그때까지 큐에 추가된 모든 항목을 해제하기 위해 한 번 스케줄링합니다.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.