Entreprise d'experts en Sécurité Informatique : Audits et conseils en cybersécurité
Entreprise française de cybersécurité depuis 2004
☎ 03 60 47 09 81 - info@securiteinfo.com


CVE-2025-21632

Description

In the Linux kernel, the following vulnerability has been resolved:x86/fpu: Ensure shadow stack is active before "getting" registersThe x86 shadow stack support has its own set of registers. Those registersare XSAVE-managed, but they are "supervisor state components" which meansthat userspace can not touch them with XSAVE/XRSTOR. It also means thatthey are not accessible from the existing ptrace ABI for XSAVE state.Thus, there is a new ptrace get/set interface for it.The regset code that ptrace uses provides an ->active() handler inaddition to the get/set ones. For shadow stack this ->active() handlerverifies that shadow stack is enabled via the ARCH_SHSTK_SHSTK bit in thethread struct. The ->active() handler is checked from some call sites ofthe regset get/set handlers, but not the ptrace ones. This was notunderstood when shadow stack support was put in place.As a result, both the set/get handlers can be called withXFEATURE_CET_USER in its init state, which would cause get_xsave_addr() toreturn NULL and trigger a WARN_ON(). The ssp_set() handler luckily has anssp_active() check to avoid surprising the kernel with shadow stackbehavior when the kernel is not ready for it (ARCH_SHSTK_SHSTK==0). Thatcheck just happened to avoid the warning.But the ->get() side wasn't so lucky. It can be called with shadow stacksdisabled, triggering the warning in practice, as reported by ChristinaSchimpe:WARNING: CPU: 5 PID: 1773 at arch/x86/kernel/fpu/regset.c:198 ssp_get+0x89/0xa0[...]Call Trace:? show_regs+0x6e/0x80? ssp_get+0x89/0xa0? __warn+0x91/0x150? ssp_get+0x89/0xa0? report_bug+0x19d/0x1b0? handle_bug+0x46/0x80? exc_invalid_op+0x1d/0x80? asm_exc_invalid_op+0x1f/0x30? __pfx_ssp_get+0x10/0x10? ssp_get+0x89/0xa0? ssp_get+0x52/0xa0__regset_get+0xad/0xf0copy_regset_to_user+0x52/0xc0ptrace_regset+0x119/0x140ptrace_request+0x13c/0x850? wait_task_inactive+0x142/0x1d0? do_syscall_64+0x6d/0x90arch_ptrace+0x102/0x300[...]Ensure that shadow stacks are active in a thread before looking them upin the XSAVE buffer. Since ARCH_SHSTK_SHSTK and user_ssp[SHSTK_EN] areset at the same time, the active check ensures that there will besomething to find in the XSAVE buffer.[ dhansen: changelog/subject tweaks ]

POC

Reference

No PoCs from references.

Github

- https://github.com/fkie-cad/nvd-json-data-feeds

- https://github.com/oogasawa/Utility-security