{"id":"CVE-2026-98745","summary":"arm64/fpsimd: signal: Forbid non-streaming SVE payload on SME-only systems","details":"In the Linux kernel, the following vulnerability has been resolved:\n\narm64/fpsimd: signal: Forbid non-streaming SVE payload on SME-only systems\n\nWhen system_supports_sme() is true but system_supports_sve() is false,\nrestoring a specifically crafted SVE signal context can result in the\ntask erroneously having non-streaming SVE state. Subsequent attempts to\nmanipulate the task's FPSIMD/SVE/SME state can result in a variety of\nproblems, including fatal EL1 UNDEFs.\n\nIn such configurations, the kernel always creates an SVE signal context\nwhen delivering a signal, and this can only be in one of two states:\n\n(1) SVE_SIG_FLAG_SM is set, and an SVE payload is present containing\n    streaming mode SVE state. The recorded VL is the task's live\n    streaming VL.\n\n(2) SVE_SIG_FLAG_SM is clear, and an SVE payload is not present. The\n    FPSIMD context contains the non-streaming mode FPSIMD state. The\n    recorded VL is 0.\n\nCurrently restore_sve_fpsimd_context() correctly rejects cases where\nSVE_SIG_FLAG_SM is set and an SVE payload is not present, but fails to\nreject cases where SVE_SIG_FLAG_SM is clear and an SVE payload is\npresent. Consequently, restore_sve_fpsimd_context() can place the task\nin a state where it has non-streaming SVE state even when this is not\nsupported by HW.\n\nFor example, this can cause a later EL1 UNDEF when the kernel attempts to\nrestore the task's ZCR_EL1 value:\n\n| # ./sme-sigcontext-to-sve\n| Internal error: Oops - Undefined instruction: 0000000002000000 [#1]  SMP\n| Modules linked in:\n| CPU: 0 UID: 0 PID: 131 Comm: sme-sigcontext- Not tainted 7.3.0-rc1 #1 PREEMPT\n| Hardware name: linux,dummy-virt (DT)\n| pstate: 61402009 (nZCv daif +PAN -UAO -TCO +DIT -SSBS BTYPE=--)\n| pc : fpsimd_restore_current_state+0x258/0x458\n| lr : exit_to_user_mode_loop+0xb8/0x188\n| sp : ffff80008056be40\n| x29: ffff80008056be40 x28: fff00000c1670000 x27: 0000000000000000\n| x26: 0000000000000000 x25: 0000000000000000 x24: 0000000000000000\n| x23: ffff80008056bec0 x22: 0000000000000008 x21: 0000000000000040\n| x20: 0000000000000081 x19: 0000000008800010 x18: 0000000000000000\n| x17: 0000fffffd412570 x16: 0000000000001000 x15: 0000fffffd4123b0\n| x14: 0000fffffd412780 x13: 0000fffffd412be8 x12: 0000000047435300\n| x11: 0000fffffd412570 x10: 0000000000000000 x9 : 0000000045585401\n| x8 : fff00000c18a6c44 x7 : 0000000000000000 x6 : 0000000000000002\n| x5 : 0000000000000002 x4 : ffff800080568000 x3 : 0000000000000001\n| x2 : 0000000008800010 x1 : fff00000c1670000 x0 : 0000000008800000\n| Call trace:\n|  fpsimd_restore_current_state+0x258/0x458 (P)\n|  exit_to_user_mode_loop+0xb8/0x188\n|  el0_svc+0x1cc/0x1d0\n|  el0t_64_sync_handler+0xa0/0xe4\n|  el0t_64_sync+0x198/0x19c\n| Code: d5384101 f9400020 53175c03 36b80de0 (d5381202)\n| ---[ end trace 0000000000000000 ]---\n| Kernel panic - not syncing: Oops - Undefined instruction: Fatal exception in interrupt\n| Kernel Offset: 0x291fb1000000 from 0xffff800080000000\n| PHYS_OFFSET: 0x40000000\n| CPU features: 0x0,00000000,0052802f,ffb88f43,3afcf73f\n| Memory Limit: none\n\nRework restore_sve_fpsimd_context() to reject cases where\nSVE_SIG_FLAG_SM is clear and an SVE payload is not present. As\nparse_user_sigframe() rejects SVE signal frames when neither SVE nor SME\nare supported, it isn't necessary for restore_sve_fpsimd_context() to\nhandle the case where neither are supported.","modified":"2026-10-20T02:30:53.971654385Z","published":"2026-10-18T15:47:30.967Z","database_specific":{"osv_generated_from":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/98xxx/CVE-2026-98745.json","cna_assigner":"Linux"},"references":[{"type":"PACKAGE","url":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git"},{"type":"WEB","url":"https://git.kernel.org/stable/c/2bce6f006cfe0b60e8249fd8d51396d99355cba3"},{"type":"WEB","url":"https://git.kernel.org/stable/c/88c1c611552b24658eb61244086691c02be2013b"},{"type":"WEB","url":"https://git.kernel.org/stable/c/e060d9069b49fe55f38057dfe592068014652671"},{"type":"WEB","url":"https://git.kernel.org/stable/c/f2338929c7663859c0c74dd6fef2c0245066f845"},{"type":"ADVISORY","url":"https://github.com/CVEProject/cvelistV5/tree/main/cves/2026/98xxx/CVE-2026-98745.json"},{"type":"ADVISORY","url":"https://nvd.nist.gov/vuln/detail/CVE-2026-98745"}],"affected":[{"ranges":[{"type":"GIT","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","events":[{"introduced":"7dde62f0687c8856b6c0660066c7ee83a6a6f033"},{"fixed":"f2338929c7663859c0c74dd6fef2c0245066f845"},{"fixed":"2bce6f006cfe0b60e8249fd8d51396d99355cba3"},{"fixed":"88c1c611552b24658eb61244086691c02be2013b"},{"fixed":"e060d9069b49fe55f38057dfe592068014652671"}]},{"type":"GIT","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","events":[{"introduced":"6.1.7"},{"fixed":"6.2"}]},{"type":"GIT","repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","events":[{"introduced":"05458ee3ff82b31a4564836a84ef20d6c233dfc7"}]}],"versions":["v6.1.190","v6.1.189","v6.1.188","v6.1.187","v6.1.186","v6.1.185","v6.1.184","v6.1.183","v6.1.182","v6.1.181","v6.1.180","v6.1.179","v6.1.178","v6.1.177","v6.1.176","v6.1.175","v6.1.174","v6.1.173","v6.1.172","v6.1.171","v6.1.170","v6.1.169","v6.1.168","v6.1.167","v6.1.166","v6.1.165","v6.1.164","v6.1.163","v6.1.162","v6.1.161","v6.1.160","v6.1.159","v6.1.158","v6.1.157","v6.1.156","v6.1.155","v6.1.154","v6.1.153","v6.1.152","v6.1.151","v6.1.150","v6.1.149","v6.1.148","v6.1.147","v6.1.146","v6.1.145","v6.1.144","v6.1.143","v6.1.142","v6.1.141","v6.1.140","v6.1.139","v6.1.138","v6.1.137","v6.1.136","v6.1.135","v6.1.134","v6.1.133","v6.1.132","v6.1.131","v6.1.130","v6.1.129","v6.1.128","v6.1.127","v6.1.126","v6.1.125","v6.1.124","v6.1.123","v6.1.122","v6.1.121","v6.1.120","v6.1.119","v6.1.118","v6.1.117","v6.1.116","v6.1.115","v6.1.114","v6.1.113","v6.1.112","v6.1.111","v6.1.110","v6.1.109","v6.1.108","v6.1.107","v6.1.106","v6.1.105","v6.1.104","v6.1.103","v6.1.102","v6.1.101","v6.1.100","v6.1.99","v6.1.98","v6.1.97","v6.1.96","v6.1.95","v6.1.94","v6.1.93","v6.1.92","v6.1.91","v6.1.90","v6.1.89","v6.1.88","v6.1.87","v6.1.86","v6.1.85","v6.1.84","v6.1.83","v6.1.82","v6.1.81","v6.1.80","v6.1.79","v6.1.78","v6.1.77","v6.1.76","v6.1.75","v6.1.74","v6.1.73","v6.1.72","v6.1.71","v6.1.70","v6.1.69","v6.1.68","v6.1.67","v6.1.66","v6.1.65","v6.1.64","v6.1.63","v6.1.62","v6.1.61","v6.1.60","v6.1.59","v6.1.58","v6.1.57","v6.1.56","v6.1.55","v6.1.54","v6.1.53","v6.1.52","v6.1.51","v6.1.50","v6.1.49","v6.1.48","v6.1.47","v6.1.46","v6.1.45","v6.1.44","v6.1.43","v6.1.42","v6.1.41","v6.1.40","v6.1.39","v6.1.38","v6.1.37","v6.1.36","v6.1.35","v6.1.34","v6.1.33","v6.1.32","v6.1.31","v6.1.30","v6.1.29","v6.1.28","v6.1.27","v6.1.26","v6.1.25","v6.1.24","v6.1.23","v6.1.22","v6.1.21","v6.1.20","v6.1.19","v6.1.18","v6.1.17","v6.1.16","v6.1.15","v6.1.14","v6.1.13","v6.1.12","v6.1.11","v6.1.10","v6.1.9","v6.1.8","v6.1.7"],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-98745.json"}},{"package":{"name":"Kernel","ecosystem":"Linux"},"ranges":[{"type":"ECOSYSTEM","events":[{"introduced":"6.2.0"},{"fixed":"6.12.113"}]},{"type":"ECOSYSTEM","events":[{"introduced":"6.13.0"},{"fixed":"6.18.56"}]},{"type":"ECOSYSTEM","events":[{"introduced":"6.19.0"},{"fixed":"7.2.10"}]}],"database_specific":{"source":"https://storage.googleapis.com/cve-osv-conversion/osv-output/CVE-2026-98745.json"}}],"schema_version":"1.9.0"}