CVE-2026-98745 in Linux
Сводка
по VulDB • 19.10.2026
В ядре Linux была устранена следующая уязвимость:
arm64/fpsimd: signal: Запретить непотоковый SVE-пейлоад на системах, поддерживающих только SME
Когда system_supports_sme() возвращает true, а system_supports_sve() — false, восстановление специально созданного контекста сигнала SVE может привести к тому, что задача ошибочно получит непотоковое состояние SVE. Последующие попытки манипулирования состоянием FPSIMD/SVE/SME задачи могут вызвать различные проблемы, включая фатальные ошибки EL1 UNDEF (неопределенная инструкция).
В таких конфигурациях ядро всегда создает контекст сигнала SVE при доставке сигнала, и он может находиться только в одном из двух состояний:
(1) Установлен флаг SVE_SIG_FLAG_SM, и присутствует пейлоад SVE, содержащий состояние SVE в потоковом режиме. Записанное значение VL (Vector Length — длина вектора) соответствует текущему активному значению VL задачи для потока.
(2) Флаг SVE_SIG_FLAG_SM сброшен, и пейлоада SVE нет. Контекст FPSIMD содержит состояние FPSIMD в непотоковом режиме. Записанное значение VL равно 0.
В настоящее время функция restore_sve_fpsimd_context() корректно отклоняет случаи, когда установлен флаг SVE_SIG_FLAG_SM, но отсутствует пейлоад SVE, однако она не отклоняет случаи, когда флаг SVE_SIG_FLAG_SM сброшен, а пейлоад SVE присутствует. В результате restore_sve_fpsimd_context() может перевести задачу в состояние с непотоковым состоянием SVE даже тогда, когда это не поддерживается аппаратным обеспечением (HW).
Например, это может вызвать ошибку EL1 UNDEF позже, когда ядро попытается восстановить значение ZCR_EL1 задачи:
| # ./sme-sigcontext-to-sve | Internal error: Oops - Undefined instruction: 0000000002000000 [#1] SMP
| Modules linked in: | CPU: 0 UID: 0 PID: 131 Comm: sme-sigcontext- Not tainted 7.3.0-rc1 #1 PREEMPT | Hardware name: linux,dummy-virt (DT) | pstate: 61402009 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--) | pc : fpsimd_restore_current_state+0x258/0x458 | lr : exit_to_user_mode_loop+0xb8/0x188 | sp : ffff80008056be40 | x29: ffff80008056be40 x28: fff00000c1670000 x27: 0000000000000000 | x26: 0000000000000000 x25: 0000000000000000 x24: 0000000000000000 | x23: ffff80008056bec0 x22: 0000000000000008 x21: 0000000000000040 | x20: 0000000000000081 x19: 0000000008800010 x18: 0000000000000000 | x17: 0000fffffd412570 x16: 0000000000001000 x15: 0000fffffd4123b0 | x14: 0000fffffd412780 x13: 0000fffffd412be8 x12: 0000000047435300 | x11: 0000fffffd412570 x10: 0000000000000000 x9 : 0000000045585401 | x8 : fff00000c18a6c44 x7 : 0000000000000000 x6 : 0000000000000002 | x5 : 0000000000000002 x4 : ffff800080568000 x3 : 0000000000000001 | x2 : 0000000008800010 x1 : fff00000c1670000 x0 : 0000000008800000 | Call trace: | fpsimd_restore_current_state+0x258/0x458 (P) | exit_to_user_mode_loop+0xb8/0x188 | el0_svc+0x1cc/0x1d0 | el0t_64_sync_handler+0xa0/0xe4 | el0t_64_sync+0x198/0x19c | Code: d5384101 f9400020 53175c03 36b80de0 (d5381202) | ---[ end trace 0000000000000000 ]---
| Kernel panic - not syncing: Oops - Undefined instruction: Fatal exception in interrupt | Kernel Offset: 0x291fb1000000 from 0xffff800080000000 | PHYS_OFFSET: 0x40000000 | CPU features: 0x0,00000000,0052802f,ffb88f43,3afcf73f | Memory Limit: none
Переписать функцию restore_sve_fpsimd_context() так, чтобы она отклоняла случаи, когда флаг SVE_SIG_FLAG_SM сброшен и отсутствует пейлоад SVE. Поскольку функция parse_user_sigframe() уже отклоняет кадры сигналов SVE, если не поддерживаются ни SVE, ни SME, нет необходимости для restore_sve_fpsimd_context() обрабатывать случай, когда не поддерживается ничего из этого набора технологий.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.