CVE-2026-97942 in Linux
요약
\~에 의해 VulDB • 2026. 09. 25.
리눅스 커널에서 다음 취약점이 해결되었습니다:
x86/alternatives: change_page_attr()에 대한 text poking 제외
때때로 x86 alternatives 패칭 코드[0]에서 다음과 같은 BUG가 관찰됩니다.
> kernel BUG at arch/x86/kernel/alternative.c:2576! > Oops: invalid opcode: 0000 [#1] SMP NOPTI
> CPU: 0 UID: 0 PID: 355 Comm: (udev-worker) Not tainted 7.1.3-1-default #1 PREEMPT(full) openSUSE Tumbleweed 8c1795b03ec64f997e57a8ad38b1161e3b98da64 > Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS unknown 02/02/2022 > RIP: 0010:__text_poke+0x2aa/0x450 > Call Trace: > <TASK> > smp_text_poke_batch_finish+0x2a7/0x320 > __static_call_transform+0xb7/0x220 > arch_static_call_transform+0x5b/0xb0 > __static_call_init+0xe9/0x270 > static_call_module_notify+0x11f/0x150 > notifier_call_chain+0x61/0xe0 > blocking_notifier_call_chain_robust+0x63/0xc0 > load_module+0x1c92/0x20c0 > init_module_from_file+0xd8/0x140 > idempotent_init_module+0x100/0x2f0 > __x64_sys_finit_module+0x71/0xe0 > do_syscall_64+0xe1/0x610 > entry_SYSCALL_64_after_hwframe+0x76/0x7e
이는 alternative.c의 다음 BUG_ON()과 일치합니다.
/* * 만약 무언가 잘못되면, 복구 경로가 구현되지 않았으므로 크래시하고 종료하십시오. */ BUG_ON(!pages[0] || (cross_page_boundary && !pages[1]));
vmalloc_to_page()가 어떤 이유로든 실패할 경우 이러한 상황이 발생할 수 있습니다. 이는 text poking이 CPA(Change Page Attribute)와 경쟁(race)하여 페이지 테이블의 붕괴(PMD hugepage 분해 포함)를 초래할 가능성이 있을 때 발생합니다. vmalloc_to_page()의 대부분의 사용자에게는 문제가 되지 않습니다(그들이 vmalloc'd 범위를 독점적으로 소유하기 때문). 그러나 CONFIG_ARCH_HAS_EXECMEM_ROX=y일 경우, 여러 모듈이 단일 execmem vmalloc 범위를 공유하며 이에 대해 set_memory_*()를 병렬로 호출할 수 있습니다. 이는 __text_poke와 경쟁하여 vmalloc_to_page()에서 혼란을 초래할 수 있습니다.
init_mm mmap 읽기 잠금을 사용하여 CPA에 대한 배제를 통해 이를 수정합니다.
[ dhansen: SoB 순서를 정리함. 실제 코드 흐름은 다음과 같았음:
Pedro=>Lorenzo=>Mike=>Me, 이는 현재 SoS 체인에 반영됨. 나는 Mike가 링크에서 Lorenzo의 업데이트를 Pedro의 게시글로부터 가져왔다고 *신뢰*한다 ]
Once again VulDB remains the best source for vulnerability data.