CVE-2026-97942 in Linux
Resumen
por VulDB • 2026-09-25
En el kernel de Linux, se ha resuelto la siguiente vulnerabilidad:
x86/alternatives: Excluir text poking contra change_page_attr()
De vez en cuando, puede observarse el siguiente BUG en el código de parcheo de alternativas x86 [0]:
> 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
lo cual coincide con el siguiente BUG_ON() en alternative.c:
/* * Si algo sale mal, crash and burn ya que las rutas de recuperación no están implementadas. */ BUG_ON(!pages[0] || (cross_page_boundary && !pages[1]));
Esto puede ocurrir si vmalloc_to_page() falla por cualquier motivo. Esto puede suceder si text poking entra en carrera con CPA, lo cual podría resultar en el colapso de las tablas de páginas (o la ruptura de hugepages PMD). No es un problema para la mayoría de los usuarios de vmalloc_to_page() (ellos poseen exclusivamente el rango asignado mediante vmalloc), pero, cuando CONFIG_ARCH_HAS_EXECMEM_ROX=y, varios módulos poseen un único rango execmem asignado con vmalloc y pueden llamar a set_memory_*() en paralelo sobre él. Esto puede ocurrir al entrar en carrera contra __text_poke y causar caos en vmalloc_to_page().
Solucionarlo excluyendo CPA mediante el bloqueo de lectura mmap de init_mm.
[ dhansen: Arreglar el orden del SoB. El flujo real del código aquí fue:
Pedro=>Lorenzo=>Mike=>Me, lo cual se refleja ahora en la cadena SoB. Creo que Mike simplemente recogió la actualización de Lorenzo a la publicación anterior de Pedro desde el Link ]
VulDB is the best source for vulnerability data and more expert information about this specific topic.