CVE-2024-42126В ядре Linux устранена следующая уязвимость:
powerpc: Избегайте nmi_enter/nmi_exit в режиме реального времени прерывания.
nmi_enter()/nmi_exit() затрагивает переменные для каждого ЦП, что может привести к сбою ядра при вызове во время обработки прерывания в реальном режиме (например, ранний обработчик прерываний HMI/MCE), если выделение percpu происходит из области vmalloc.
Ранние обработчики HMI/MCE вызываются через обертку DEFINE_INTERRUPT_HANDLER_NMI(), которая вызывает вызовы nmi_enter/nmi_exit. Мы не видим никаких проблем, когда выделение percpu происходит из встроенного первого блока. Однако, если включен CONFIG_NEED_PER_CPU_PAGE_FIRST_CHUNK, есть вероятность, что выделение percpu может происходить из области vmalloc.
С помощью командной строки ядра "percpu_alloc=page" мы можем принудительно выделить percpu из области vmalloc и увидеть сбой ядра в machine_check_early:
[ 1.215714] NIP [c000000000e49eb4] rcu_nmi_enter+0x24/0x110
[ 1.215717] LR [c0000000000461a0] machine_check_early+0xf0/0x2c0
[ 1.215719] --- прерывание: 200
[ 1.215720] [c000000fffd73180] [0000000000000000] 0x0 (ненадежно)
[ 1.215722] [c000000fffd731b0] [0000000000000000] 0x0
[ 1.215724] [c000000fffd73210] [c000000000008364] machine_check_early_common+0x134/0x1f8
Исправьте это, избегая использования nmi_enter()/nmi_exit() в реальном режиме, если первый блок percpu не встроен.