В ядре Linux устранена следующая уязвимость: x86/efi: Исправьте изящную обработку неисправностей после изменений FPU softirq С момента сове…
В ядре Linux устранена следующая уязвимость: x86/efi: Исправьте изящную обработку неисправностей после изменений FPU softirq С момента совершения d02198550423 ("x86/fpu: Улучшение крипто-производительности по сделать ядро-режим FPU надежно использовать в softirqs"), kernel_fpu_begin() звонки fpregs_lock(), которые используют local_bh_disable() вместо предыдущий превент_извлекать (). Это устанавливает SOFTIRQ_OFFSET в preempt_count во время всего вызова службы EFI, в результате чего in_interrupt() Вернитесь в обычном контексте задачи. Изящная страница обработчик неисправностей efi_crash_gracefully_on_page_fault() использует in_interrupt() для выручки за неисправности в реальном контексте прерывания. С SOFTIRQ_OFFSET теперь установлен, обработчик всегда выручает, оставляя EFI ошибки страницы прошивки без прикрытия. Это перерастает в смерть (), что также видит in_interrupt() как правда и вызывает паника («Роковое исключение в прерывании»), приводит к жесткой системе замораживания. На системах с багги прошивкой, которые запускает ошибки страницы во время выполнения звонков EFI (например, доступ к ненанесенным на карту память в GetTime ()), это вызывает невосстановимое вмешательство вместо ожидаемое изящное восстановление EFI_ABORTED. Исправить, заменив in_interrupt() на !in_task(). Это сохраняет первоначальное намерение залога за прерывания или ошибки NMI, в то время как больше не ложное инициирование с пути FPU-код-пути local_bh_disable(). [ardb: Сашико заметил, что с помощью 'in_hardirq() || in_nmi()' уходит окно, где может быть взят softirq до fpregs_lock() звонит, но после efi_rts_work.efi_rts_id назначен, и любые ошибки страницы, возникающие в этом окне, будут Неправилизированные как вызванные прошивкой. Вместо этого, использовать !in_task(), который включает in_serving_softirq(). ]
| Продукт | Вендор | Статус |
|---|---|---|
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается | |
| linux | Отслеживается |