CVE-2026-98745 in Linux
Sumário
de VulDB • 18/10/2026
No kernel do Linux, a seguinte vulnerabilidade foi resolvida:
arm64/fpsimd: sinal: Proibir payload SVE não-streaming em sistemas apenas SME
Quando system_supports_sme() for verdadeiro e system_supports_sve() for falso, restaurar um contexto de sinal SVE especificamente manipulado pode resultar na tarefa tendo erroneamente o estado SVE não-streaming. Tentativas subsequentes de manipular o estado FPSIMD/SVE/SME da tarefa podem resultar em uma variedade de problemas, incluindo EL1 UNDEFs fatais.
Nessas configurações, o kernel sempre cria um contexto de sinal SVE ao entregar um sinal, e isso só pode estar em um dos dois estados:
(1) SVE_SIG_FLAG_SM está definido, e há um payload SVE presente contendo estado SVE no modo streaming. O VL registrado é o VL de streaming ativo da tarefa.
(2) SVE_SIG_FLAG_SM não está definido, e não há payload SVE presente. O contexto FPSIMD contém o estado FPSIMD no modo não-streaming. O VL registrado é 0.
Atualmente, restore_sve_fpsimd_context() rejeita corretamente os casos em que SVE_SIG_FLAG_SM está definido e não há um payload SVE presente, mas falha ao rejeitar os casos em que SVE_SIG_FLAG_SM não está definido e há um payload SVE presente. Consequentemente, restore_sve_fpsimd_context() pode colocar a tarefa em um estado onde ela possui estado SVE não-streaming mesmo quando isso não é suportado pelo hardware (HW).
Por exemplo, isso pode causar um EL1 UNDEF posterior quando o kernel tenta restaurar o valor ZCR_EL1 da tarefa:
| # ./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
Reestruturar restore_sve_fpsimd_context() para rejeitar casos em que SVE_SIG_FLAG_SM não está definido e um payload SVE está presente. Como parse_user_sigframe() rejeita quadros de sinal SVE quando nem SVE nem SME são suportados, não é necessário que restore_sve_fpsimd_context() lide com o caso onde nenhum dos dois é suportado.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.